我需要一个新的临时目录来在Shell脚本中执行一些工作。工作完成后(或者如果我在中途终止工作),我希望脚本更改回旧的工作目录并清除临时目录。在Ruby中,可能看起来像这样:

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

最佳答案

干得好:

#!/bin/bash
TDIR=`mktemp -d`

trap "{ cd - ; rm -rf $TDIR; exit 255; }" SIGINT

cd $TDIR
# do important stuff here
cd -

rm -rf $TDIR

exit 0

10-07 16:24