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
Both mktemp
and tempfile
create a short lived file as their default motion and print the title and site of the file as output:
$ tempfile
/tmp/fileR5dt6r$ mktemp
/tmp/tmp.ojEfvMaJEp
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
/house/tux/Demo/tmp.i8NuhzbEJN
For tempfile
, use the --directory
or -d
choice:
$ tempfile --directory ~/Demo/
/house/sek/Demo/fileIhg9aX
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 mktemp
and 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
/house/tux/Demo/tmp.PjP3g6lCq1
Use $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/
/house/tux/Demo/tmp.68ukbuluqI$ file /house/tux/Demo/tmp.68ukbuluqI
/house/tux/Demo/tmp.68ukbuluqI: listing
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.
With mktemp
, you possibly can add a suffix to your filename:
$ mktemp -p ~/Demo/ --suffix .mine
/house/tux/Demo/tmp.dufLYfwJLO.mine
With tempfile
, you possibly can set a prefix and a suffix:
$ tempfile --directory ~/Demo/
--prefix tt_ --suffix .mine
/house/tux/Demo/tt_0dfu5q.mine
Tempfile as contact
You may set a customized title with tempfile
:
$ tempfile --name not_random
not_random
When you employ the --name
choice, it is absolute, ignoring all different types of customization. In reality, it even ignores the --directory
choice:
$ tempfile --directory ~/Demo
--prefix this_is_ --suffix .all
--name not_random_at
not_random_at
In a method, tempfile
is usually a substitute for contact
and take a look at
as a result of it refuses to create a file that already exists:
$ tempfile --name instance.txt
open: file exists
The 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 chmod
, lower
, 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.
Wrap up
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.