Linux中國

在 Linux 上使用 Bash 創建一個臨時文件

使用 Bash 腳本語言進行編程時,有時需要創建一個臨時文件。例如,你可能需要一個可以提交到磁碟的中間文件,以便你可以使用另一個命令對其進行處理。創建諸如 temp 之類的文件或任何以 .tmp 結尾的文件很容易。但是,這些名稱很可能是由其他進程生成的,因此你可能會不小心覆蓋現有的臨時文件。除此之外,你不應該花費腦力想出看起來獨特的名字。基於 Fedora 的系統上的 mktemp 命令和基於 Debian 的系統上的 tempfile 是專門為減輕這種負擔而設計的,它使創建、使用和刪除獨特的文件變得容易。

創建一個臨時文件

mktemptempfile 都創建一個臨時文件作為它們的默認操作,並列印文件的名稱和位置作為輸出:

$ tempfile
/tmp/fileR5dt6r

$ mktemp 
/tmp/tmp.ojEfvMaJEp

除非你指定不同的路徑,否則系統會將臨時文件放在 /tmp 目錄中。

對於 mktemp,可以使用 -p 選項指定路徑:

$ mktemp -p ~/Demo
/home/tux/Demo/tmp.i8NuhzbEJN

對於 tempfile,可以使用 --directory-d 選項:

$ tempfile --directory ~/Demo/
/home/sek/Demo/fileIhg9aX

找到你的臨時文件

使用自動生成的臨時文件的問題是你無法知道它的名字是什麼。這就是為什麼兩個命令都返回生成的文件名作為輸出的原因。你可以使用 Konsole、GNOME 終端或 rxvt 等互動式 shell 來使用終端上顯示的文件名與文件進行交互。

但是,如果你正在編寫腳本,則無法通過讀取文件名並在以下命令中使用它來進行干預。

mktemptempfile 的作者想到了這個問題,並且有一個簡單的解決方法。終端將輸出發送到名為「標準輸出」的流。你可以通過將變數設置為在子 shell 中啟動的命令的結果來捕獲標準輸出:

$ TMPFILE=$(mktemp -p ~/Demo)

$ echo $TMPFILE
/home/tux/Demo/tmp.PjP3g6lCq1

引用文件時使用 $TMPFILE,它與直接與文件本身交互相同。

使用 mktemp 創建一個臨時目錄

你還可以使用 mktemp 命令創建目錄而不是文件:

$ mktemp --directory -p ~/Demo/
/home/tux/Demo/tmp.68ukbuluqI

$ file /home/tux/Demo/tmp.68ukbuluqI
/home/tux/Demo/tmp.68ukbuluqI: directory

自定義臨時名稱

有時你甚至可能希望在偽隨機生成的文件名中加入可預測性元素。你可以使用這兩個命令自定義臨時文件的名稱。

使用 mktemp,你可以為文件名添加後綴:

$ mktemp -p ~/Demo/ --suffix .mine
/home/tux/Demo/tmp.dufLYfwJLO.mine

使用 tempfile,你可以設置前綴和後綴:

$ tempfile --directory ~/Demo/ --prefix tt_ --suffix .mine
/home/tux/Demo/tt_0dfu5q.mine

把 tempfile 作為 touch 使用

你還可以使用 tempfile 設置自定義名稱:

$ tempfile --name not_random
not_random

當你使用 --name 選項時,它是絕對的,忽略所有其他形式的自定義。事實上,它甚至忽略了 --directory 選項:

$ tempfile --directory ~/Demo --prefix this_is_ --suffix .all --name not_random_at
not_random_at

在某種程度上,tempfile 可以替代 touchtest,因為它拒絕創建已經存在的文件:

$ tempfile --name example.txt
open: file exists

tempfile 命令並非默認安裝在所有 Linux 發行版上,因此在將其用作腳本中的 test 的 hack 之前,你必須確保它存在。

安裝 mktemp 和 tempfile

GNU Core Utils 包括 mktemp 命令。主要發行版默認包括 Core Utils(它是包含 chmodcutdu 和其他基本命令的同一個軟體包)。

Debian Utils 軟體包包含 tempfile 命令,默認安裝在大多數基於 Debian 的發行版和 Slackware Linux 上。

總結

臨時文件很方便,因為不會混淆它們是否可以安全刪除。它們是臨時的,意在根據需要使用並毫不猶豫地丟棄。在需要時使用它們,並在完成後清除它們。

via: https://opensource.com/article/22/6/make-temporary-file-bash

作者:Seth Kenlon 選題:lkxed 譯者:geekpi 校對:wxy

本文由 LCTT 原創編譯,Linux中國 榮譽推出


本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive

對這篇文章感覺如何?

太棒了
0
不錯
0
愛死了
0
不太好
0
感覺很糟
0
雨落清風。心向陽

    You may also like

    Leave a reply

    您的電子郵箱地址不會被公開。 必填項已用 * 標註

    此站點使用Akismet來減少垃圾評論。了解我們如何處理您的評論數據

    More in:Linux中國