文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

在 Linux 上使用 Bash 创建一个临时文件

2024-12-01 19:42

关注

使用 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: directory

自定义临时名称

有时你甚至可能希望在伪随机生成的文件名中加入可预测性元素。你可以使用这两个命令自定义临时文件的名称。

使用 ​​mktemp​​,你可以为文件名添加后缀:

    $ mktemp -p ~/Demo/ --suffix .mine
/home/tux/Demo/tmp.dufLYfwJLO.mine

使用 ​​tempfile​​,你可以设置前缀和后缀:

    $ tempfile --directory ~/Demo/ --prefix tt_ --suffix .mine
/home/tux/Demo/tt_0dfu5q.mine

把 tempfile 作为 touch 使用

你还可以使用 ​​tempfile​​ 设置自定义名称:

    $ tempfile --name not_random
not_random

当你使用 ​​--name​​​ 选项时,它是绝对的,忽略所有其他形式的自定义。事实上,它甚至忽略了 ​​--directory​​ 选项:

    $ tempfile --directory ~/Demo --prefix this_is_ --suffix .all --name not_random_at
not_random_at

在某种程度上,​​tempfile​​​ 可以替代 ​​touch​​​ 和 ​​test​​,因为它拒绝创建已经存在的文件:

    $ tempfile --name example.txt
open: file exists

​tempfile​​​ 命令并非默认安装在所有 Linux 发行版上,因此在将其用作脚本中的 ​​test​​ 的 hack 之前,你必须确保它存在。

安装 mktemp 和 tempfile

​GNU Core Utils​​​ 包括 ​​mktemp​​​ 命令。主要发行版默认包括 Core Utils(它是包含 ​​chmod​​​、​​cut​​​、​​du​​ 和其他基本命令的同一个软件包)。

Debian Utils 软件包包含 ​​tempfile​​ 命令,默认安装在大多数基于 Debian 的发行版和 Slackware Linux 上。

总结

临时文件很方便,因为不会混淆它们是否可以安全删除。它们是临时的,意在根据需要使用并毫不犹豫地丢弃。在需要时使用它们,并在完成后清除它们。

来源:Linux中国内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯