我需要一個新的臨時目錄在shell腳本中完成一些工作。當工作完成時(或者如果我中途殺死了作業),我希望腳本改回舊的工作目錄並清除臨時工作目錄。在Ruby中,它可能看起來像這樣:在shell腳本中臨時目錄中的臨時操作
require 'tmpdir'
Dir.mktmpdir 'my_build' do |temp_dir|
puts "Temporary workspace is #{temp_dir}"
do_some_stuff(temp_dir)
end
puts "Temporary directory already deleted"
在Bash腳本中,這樣做會是什麼樣的結果?
這是我目前的實施。任何想法或建議?
here=$(pwd)
tdir=$(mktemp -d)
trap 'return_here' INT TERM EXIT
return_here() {
cd "$here"
[ -d "$tdir" ] && rm -rf "$tdir"
}
do_stuff # This may succeed, fail, change dir, or I may ^C it.
return_here
您可以使用「CD - 」返回到以前的目錄。這樣你就不必保存舊目錄的名稱。另一種選擇是使用pushd/popd。 – JayM 2010-03-19 00:21:59
我明確地存儲了目錄,給予do_stuff自由改變目錄,改變pushd隊列等等。但在我的情況下,我知道'do_stuff'不使用pushd/popd,所以這將是一個更好的實現! – JasonSmith 2010-03-19 01:03:27
我不會相信'cd -'(在陷阱運行之前,腳本可能有多個地方「cd-ed」)。 – 2010-03-19 01:09:33