最近我真的搞砸了。我有這將互換的兩個文件的內容的函數:Bash完成「本地」變量後,tmp文件在哪裏?
function swap()
{
local TMPFILE=tmp.$$
mv "$1" "$TMPFILE"
mv "$2" "$1"
mv "$TMPFILE""$2"
} ^
正如你可以看到右側不遠的地方胡蘿蔔指向一個空間丟失。 作爲運行下面的命令的結果:
$ swap important.txt not-important.txt
原因important.txt到由未important.txt和important.txt被覆蓋被髮送到本地的bash變量的深淵/文件
是有沒有什麼選項可以抓取磁盤上的原始數據?
$ grep -a -A1000 -B1000 "some text from important.txt" /dev/disk0
查找/ tmp文件夾。有一點點運氣,你的操作系統會提供像/tmp/tmp.1234這樣的tmpfiles,或者從你的腳本中,我也會查看當前目錄,你的主目錄,你的路徑,文件名爲tmp。* – Pieter21 2014-09-28 23:02:42
閱讀你的腳本,我假設TMPFILE = tmp。$$是一些bash內建的臨時文件。但顯然它只是將「tmp。」放入TMPFILE中。因此,臨時文件應位於執行命令的目錄中。壞消息是:如果在同一個shell會話中多次使用swap(),那麼臨時文件的名稱總是保持不變(因此在隨後的調用中內容會被覆蓋)... –
misberner
2014-09-28 23:20:00
爲了將來的參考,您希望'TMPFILE = $(mktemp)'來產生一個新的臨時文件名(在'/ tmp /'中默認),每次調用'swap'。另外,如果前一個成功,你只想執行每個'mv',並且(如果其中任何一個失敗,則可能會中止程序):'mv「$ 1」「$ TMPFILE」&& mv「$ 2」「$ 1」&& mv「 $ TMPFILE「」$ 2「|| {回聲「交換失敗」>&2;出口1; }'。 – chepner 2014-09-28 23:25:37