Sometimes you need to create a temporary file in your shell script. There are various methods exist to create a random temporary file name. It is quite useful if your application/shell scripting needs temporary unique file names.
Method # 1 Use of mktemp or tempfile utility
As the name suggest, both of the following commands create a unique temporary file or directory. Just type the mktemp at the shell prompt to create it a temp file or dir:
Please note that the tempfile command is deprecated; you should use always use mktemp command instead. So to create a temp file:
tfile=$(mktemp /tmp/foo.XXXXXXXXX) echo "a file: $tfile"
To create a temp dir:
tdir=$(mktemp -d /tmp/foo.XXXXXXXXX) echo "a direcotry: $tdir"
How to make a directory
Make a unique temporary directory instead of a file using -d option. The syntax is:
$ mktemp -d
A shell script example
#!/bin/bash s="https://server1.cyberciti.biz/?Download=ips-v4&Format=text" f="$(mktemp /tmp/myscript.XXXXXX)" wget -q -O $f $s echo "IPv4 address downloaded to '$f'.." echo "Processing..." # # logic to do something on $f here # # Delete the temp file rm -f "$f"
Rest of the following methods are insecure and do not use them in production. They are here for historical reasons only.
Method #2: Use $RANDOM bash shell variable
At shell prompt type the command:
$ echo $RANDOM
You can use it as follows:
file="/tmp/myscript.$RANDOM" echo "Working on temp $file ..." echo "Deleting $file ..." rm -f "$file"
Method # 3 Use of $$ variable
This is old and classic method. $$ shell variable returns the current running process this can be use to create unique temporary file as demonstrated in following script:
#!/bin/bash # TFILE="/tmp/$(basename $0).$$.tmp" ls > $TFILE echo "See directory listing in $TFILE"
Save the script and execute as follows:
$ chmod +x random2.bash
$ ./ random2.bash
Use this method if your script needs only ONE temporary file.