在使用Bash脚本语言编程时,有时需要创建一个临时文件。例如,您可能需要一个可以提交到磁盘的中间文件,以便您可以使用另一个命令处理它。创建类似temp或任何以.tmp结尾的文件很容易。但是,这些名称可能是由其他进程生成的,因此您可能会不小心覆盖现有的临时文件。除此之外,您不应该花费脑力来想出外观独特的名字。基于Fedora的系统上的mktemp命令和基于Debian的系统上的tempfile专门设计用于通过简化创建、使用和删除唯一文件来减轻这种负担。创建一个临时文件mktemp和tempfile都创建一个临时文件作为它们的默认操作,并将文件的名称和位置打印为输出:$tempfile/tmp/fileR5dt6r$mktemp/tmp/tmp.ojEfvMaJEp除非您指定不同的路径,否则系统会将临时文件放在/tmp目录中。对于mktemp,您可以使用-p选项指定路径:$mktemp-p~/Demo/home/tux/Demo/tmp.i8NuhzbEJN对于tempfile,您可以使用--directory或-d选项:$tempfile--directory~/Demo//home/sek/Demo/fileIhg9aX找到你的临时文件使用自动生成的临时文件的问题是你无法知道它的名字是什么。这就是为什么这两个命令都将生成的文件名作为输出返回的原因。您可以使用Konsole、GNOME终端或rxvt等交互式shell,使用终端上显示的文件名与文件进行交互。但是,如果您正在编写脚本,则无法通过读取文件名并在以下命令中使用它来进行干预。mktemp和tempfile的作者想到了这个问题,并且有一个简单的解决方法。终端将输出发送到称为“标准输出”的流。您可以通过将变量设置为在子shell中启动的命令的结果来捕获标准输出:$TMPFILE=$(mktemp-p~/Demo)$echo$TMPFILE/home/tux/Demo/tmp.PjP3g6lCq1引用文件时使用$TMPFILE,它与直接与文件本身交互是一样的。使用mktemp创建临时目录您还可以使用mktemp命令创建目录而不是文件:$mktemp--directory-p~/Demo//home/tux/Demo/tmp.68ukbuluqI$file/home/tux/Demo/tmp.68ukbuluqI/home/tux/Demo/tmp.68ukbuluqI:目录自定义临时名称有时您甚至可能想为伪随机生成的文件名添加可预测性元素。您可以使用这两个命令自定义临时文件的名称。使用mktemp,您可以为文件名添加后缀:$mktemp-p~/Demo/--suffix.mine/home/tux/Demo/tmp.dufLYfwJLO.mine使用tempfile,您可以设置前缀和后缀:$tempfile--directory~/Demo/--prefixtt_--suffix.mine/home/tux/Demo/tt_0dfu5q.mine使用tempfile作为touch您还可以使用tempfile设置自定义名称:$tempfile--namenot_randomnot_random当您使用--name选项,它是绝对的,所有其他形式的定制都将被忽略。事实上,它甚至忽略了--directory选项:$tempfile--directory~/Demo--prefixthis_is_--suffix.all--namenot_random_atnot_random_at在某种程度上,tempfile是touch和test的替代品,因为它拒绝创建已经存在的文件:$tempfile--nameexample.txtopen:fileexiststempfile命令并非默认安装在所有Linux发行版上,因此您必须确保它存在,然后再将其用作hack进行测试脚本。安装mktemp和临时文件GNUCoreUtils包括mktemp命令。主要发行版默认包含CoreUtils(它与包含chmod、cut、du和其他基本命令的包相同)。DebianUtils软件包包含tempfile命令,默认安装在大多数基于Debian的发行版和SlackwareLinux上。汇总临时文件很方便,因为不会混淆它们是否可以安全删除。它们是临时的,意味着可以根据需要使用并毫不犹豫地丢弃。需要时使用它们,用完后清除它们。
