Necesito un nuevo directorio temporal para hacer algún trabajo en un script de shell. Cuando el trabajo esté terminado (o si elimino el trabajo a mitad de camino), quiero que el script vuelva al antiguo directorio de trabajo y borre el temporal. En Ruby, que podría tener este aspecto:Operación temporal en un directorio temporal en el script de 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"
¿Cuál sería la mejor inversión por el dinero para hacer eso en un script Bash?
Aquí está mi implementación actual. ¿Alguna idea o sugerencia?
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
Puede utilizar 'cd -' para volver a la anterior directorio. De esta forma, no tiene que guardar el nombre del directorio anterior. Otra opción sería usar pushd/popd. – JayM
Almacena explícitamente el directorio para dar libertad a 'do_stuff' para cambiar el directorio, cambiar la cola pushd, etc. Sin embargo, en mi caso sé que' do_stuff' no usa pushd/popd, ¡así que sería una implementación mucho más agradable! – JasonSmith
No confío en 'cd -' (el script puede tener' cd'-ed en varios lugares antes de que se ejecute la trampa). –