Ho bisogno di una nuova directory temporanea per fare un po 'di lavoro in uno script di shell. Quando il lavoro è finito (o se uccido il lavoro a metà strada), voglio che lo script ritorni alla vecchia directory di lavoro e cancelli quella temporanea. In Ruby, potrebbe essere il seguente:Operazione temporanea in una directory temporanea nello script di 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"
Quale sarebbe il miglior modo per farlo in uno script Bash?
Ecco la mia attuale implementazione. Qualche idea o suggerimento?
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
È possibile utilizzare 'cd -' per tornare alla precedente directory. In questo modo non devi salvare il nome della vecchia directory. Un'altra opzione potrebbe essere l'uso di pushd/popd. – JayM
Ho memorizzato esplicitamente la directory per dare a 'do_stuff' la libertà di cambiare directory, cambiare la coda pushd, ecc. Comunque nel mio caso so che' do_stuff' non usa pushd/popd quindi sarebbe un'implementazione molto più bella! – JasonSmith
Non mi fiderei di 'cd -' (lo script potrebbe avere' cd'-ed-multiplo prima dell'esecuzione del trap). –