Handling temporary files in BASH shell scripts
Thursday, June 5th, 2008Temporary files left over from shell scripts clutter up your /tmp directory and may result in information leakage. Below are a pair of functions we use to gracefully handle the creation and removal of temporary files in shell scripts.
The first function is used to create a temporary file:
function os_mktemp {
[[ ! $1 ]] && echo "os_mktemp: required a handle name" && exit 99
let OS_TEMPFILEHANDLE++;
OS_TEMPFILE[$OS_TEMPFILEHANDLE]=`mktemp /tmp/ostmp.XXXXXXXX`
eval F_$1=${OS_TEMPFILE[$OS_TEMPFILEHANDLE]}
}
It requires a single parameter, which is used to create a variable name containing the path to the temporary file. For example. os_mktemp FTPOUTPUT will return a variable $F_FTPOUTPUT.
The array OS_TEMPFILE is an array holding the names of all the temporary file names, this is used by the cleanup function to remove the temporary files.
os_mktemp OUTPUT; this results in a temporary file with a random name being created and the name being stored in the variable $F_OUTPUT.
The second function is used to remove all temporary files.
function os_cleanup {
for FILE in ${OS_TEMPFILE[@]}; do
[[ -e "$FILE" ]] && rm "$FILE" || echo "os_cleanup: couldn't remove temporary file $FILE."
done
}
To ensure the os_cleanup code is executed whenever the shell script closes, we use the BASH trap command.
trap os_cleanup INT TERM EXIT