When programming within the Bash scripting language, you generally have to create a short lived file. For occasion, you would possibly have to have an middleman file you possibly can decide to disk so you possibly can course of it with one other command. It’s straightforward to create a file akin to
temp or something ending in
.tmp. However, these names are simply as prone to be generated by another course of, so you can by chance overwrite an current non permanent file. And in addition to that, you should not need to expend psychological effort arising with names that appear distinctive. The
mktemp command on Fedora-based methods and
tempfile on Debian-based methods are specifically designed to alleviate that burden by making it straightforward to create, use, and take away distinctive recordsdata.
Create a short lived file
tempfile create a short lived file as their default motion and print the title and site of the file as output:
Unless you specify a distinct path, the system locations non permanent recordsdata within the
/tmp listing. For
mktemp, use the
-p choice to specify a path:
$ mktemp -p ~/Demo
tempfile, use the
$ tempfile --directory ~/Demo/
Find your non permanent file
The downside with utilizing an auto-generated non permanent file is that you haven’t any method of figuring out what its title goes to be. That’s why each instructions return the generated file title as output. You can use an interactive shell akin to Konsole, GNOME Terminal, or rxvt to make use of the filename displayed in your terminal to work together with the file.
However, for those who’re writing a script, there isn’t any method so that you can intervene by studying the title of the file and utilizing it within the following instructions.
The authors of
tempfile considered that downside, and there is a simple repair. The terminal sends output to a stream known as stdout. You can seize stdout by setting a variable to the outcomes of a command launched in a subshell:
$ TMPFILE=$(mktemp -p ~/Demo)
$ echo $TMPFILE
$TMPFILE when referring to the file, and it is the identical as interacting instantly with the file itself.
Create a short lived listing with mktemp
You may use the
mktemp command to create a listing as a substitute of a file:
$ mktemp --directory -p ~/Demo/
$ file /house/tux/Demo/tmp.68ukbuluqI
Customize non permanent names
Sometimes you may want a component of predictability in even your pseudo-randomly generated filenames. You can customise the names of your non permanent recordsdata with each instructions.
mktemp, you possibly can add a suffix to your filename:
$ mktemp -p ~/Demo/ --suffix .mine
tempfile, you possibly can set a prefix and a suffix:
$ tempfile --directory ~/Demo/
--prefix tt_ --suffix .mine
Tempfile as contact
You may set a customized title with
$ tempfile --name not_random
When you employ the
--name choice, it is absolute, ignoring all different types of customization. In reality, it even ignores the
$ tempfile --directory ~/Demo
--prefix this_is_ --suffix .all
In a method,
tempfile is usually a substitute for
take a look at as a result of it refuses to create a file that already exists:
$ tempfile --name instance.txt
open: file exists
tempfile command is not put in on all Linux distributions by default, so you will need to be sure that it exists earlier than you employ it as a hack round
take a look at in a script.
Install mktemp and tempfile
GNU Core Utils contains the
mktemp command. Major distributions embrace Core Utils by default (it is the identical bundle that comprises
du, and different important instructions).
The Debian Utils bundle contains the
tempfile command and is put in by default on most Debian-based distributions and Slackware Linux.
Temporary recordsdata are handy as a result of there isn’t any confusion about whether or not they’re secure to delete. They’re non permanent, meant for use as wanted and discarded with no second thought. Use them whenever you want them, and clear them out whenever you’re accomplished.