Tôi cần thư mục tạm thời mới để thực hiện một số công việc trong tập lệnh shell. Khi công việc được thực hiện (hoặc nếu tôi giết công việc giữa chừng), tôi muốn tập lệnh thay đổi trở lại thư mục làm việc cũ và xóa sạch thư mục tạm thời. Trong Ruby, nó có thể trông giống như thế này:Hoạt động tạm thời trong một thư mục tạm thời trong tập lệnh 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"
Điều gì sẽ là tốt nhất cho buck để làm điều đó trong một kịch bản Bash?
Đây là triển khai hiện tại của tôi. Bất kỳ suy nghĩ hoặc gợi ý nào?
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
Bạn có thể sử dụng 'cd -' để trở về trước danh mục. Bằng cách đó bạn không phải lưu tên của thư mục cũ. Một tùy chọn khác là sử dụng pushd/popd. – JayM
Tôi đã lưu trữ thư mục để tự do thay đổi thư mục, thay đổi hàng đợi pushd, v.v. Tuy nhiên trong trường hợp của tôi, tôi biết 'do_stuff' không sử dụng pushd/popd để có thể thực hiện tốt hơn nhiều! – JasonSmith
Tôi sẽ không tin tưởng 'cd -' (tập lệnh có thể có nhiều địa chỉ' cd'-ed trước khi bẫy chạy). –