Redian新闻
>
在 Linux 上使用 Bash 创建一个临时文件 | Linux 中国

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

科技
 
导读:基于 Fedora 的系统上的 mktemp 命令和基于 Debian 的系统上的 tempfile 是专门为减轻这种负担而设计的,它使创建、使用和删除独特的文件变得容易。
本文字数:2700,阅读时长大约:3分钟

基于 Fedora 的系统上的 mktemp 命令和基于 Debian 的系统上的 tempfile 是专门为减轻这种负担而设计的,它使创建、使用和删除独特的文件变得容易。

使用 Bash 脚本语言进行编程时,有时需要创建一个临时文件。例如,你可能需要一个可以提交到磁盘的中间文件,以便你可以使用另一个命令对其进行处理。创建诸如 temp 之类的文件或任何以 .tmp 结尾的文件很容易。但是,这些名称很可能是由其他进程生成的,因此你可能会不小心覆盖现有的临时文件。除此之外,你不应该花费脑力想出看起来独特的名字。基于 Fedora 的系统上的 mktemp 命令和基于 Debian 的系统上的 tempfile 是专门为减轻这种负担而设计的,它使创建、使用和删除独特的文件变得容易。

创建一个临时文件

mktemp 和 tempfile 都创建一个临时文件作为它们的默认操作,并打印文件的名称和位置作为输出:

  1. $ tempfile
  2. /tmp/fileR5dt6r
  3. $ mktemp
  4. /tmp/tmp.ojEfvMaJEp

除非你指定不同的路径,否则系统会将临时文件放在 /tmp 目录中。

对于 mktemp,可以使用 -p 选项指定路径:

  1. $ mktemp -p ~/Demo
  2. /home/tux/Demo/tmp.i8NuhzbEJN

对于 tempfile,可以使用 --directory 或 -d 选项:

  1. $ tempfile --directory ~/Demo/
  2. /home/sek/Demo/fileIhg9aX

找到你的临时文件

使用自动生成的临时文件的问题是你无法知道它的名字是什么。这就是为什么两个命令都返回生成的文件名作为输出的原因。你可以使用 Konsole、GNOME 终端或 rxvt🔗 opensource.com 等交互式 shell 来使用终端上显示的文件名与文件进行交互。

但是,如果你正在编写脚本,则无法通过读取文件名并在以下命令中使用它来进行干预。

mktemp 和 tempfile 的作者想到了这个问题,并且有一个简单的解决方法。终端将输出发送到名为“标准输出”的流。你可以通过将变量设置为在子 shell 中启动的命令的结果来捕获标准输出:

  1. $ TMPFILE=$(mktemp -p ~/Demo)
  2. $ echo $TMPFILE
  3. /home/tux/Demo/tmp.PjP3g6lCq1

引用文件时使用 $TMPFILE,它与直接与文件本身交互相同。

使用 mktemp 创建一个临时目录

你还可以使用 mktemp 命令创建目录而不是文件:

  1. $ mktemp --directory -p ~/Demo/
  2. /home/tux/Demo/tmp.68ukbuluqI
  3. $ file /home/tux/Demo/tmp.68ukbuluqI
  4. /home/tux/Demo/tmp.68ukbuluqI: directory

自定义临时名称

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

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

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

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

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

把 tempfile 作为 touch 使用

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

  1. $ tempfile --name not_random
  2. not_random

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

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

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

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

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

安装 mktemp 和 tempfile

GNU Core Utils🔗 www.gnu.org 包括 mktemp 命令。主要发行版默认包括 Core Utils(它是包含 chmodcutdu 和其他基本命令的同一个软件包)。

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

总结

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


via: https://opensource.com/article/22/6/make-temporary-file-bash

作者:Seth Kenlon 选题:lkxed 译者:geekpi 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出


LCTT 译者 :geekpi
💎💎💎💎
翻译: 1720.5 篇
|
贡献: 3171 天
2013-10-25
2022-07-01
https://linux.cn/lctt/geekpi
欢迎遵照 CC-BY-SA 协议规定转载,
如需转载,请在文章下留言 “转载:公众号名称”,
我们将为您添加白名单,授权“转载文章时可以修改”。

微信扫码关注该文公众号作者

戳这里提交新闻线索和高质量文章给我们。
相关阅读
2022庭院:错把海棠做山楂在 Linux 上使用 Rhythbox 听音乐 | Linux 中国我是如何使用 Linux fmt 命令来格式化文本 | Linux 中国南方婆婆,北方媳妇和躲不过去的猪队友如何在 Linux 中实时监控日志文件(桌面和服务器) | Linux 中国上一个说“丼”不读jǐng的人,已经被我骂哭了为地铁站构建一个智能停车系统 | Linux 中国如何在 Linux 桌面中启用 “激活 Linux” 水印通知 | Linux 中国在 Linux 中使用组合键输入隐藏的字形 | Linux 中国Linux Lite 6.0 发布:弃用 Firefox,默认浏览器使用 Chrome | Linux 中国使用 watch 和 tail 命令监视 Linux 上的活动 | Linux 中国在 Linux 上使用 sudo 命令的 5 个理由 | Linux 中国使用 dnf 进行 Linux 包管理 | Linux 中国英伟达在提升 Linux 上的 GPU 使用体验上迈出了一大步 | Linux 中国如何编写 C 程序在 Linux 上创建音乐播放列表 | Linux 中国使用 apt 进行 Linux 包管理 | Linux 中国又有 Linux 开发者加入微软,这次是 systemd 的创建者 | Linux 中国在 Linux 中隐藏文件和文件夹的那些事 | Linux 中国如何在 Linux 中使用 Pandoc 转换文件格式 | Linux 中国分享 8 篇使用 Linux 命令行的技巧 | Linux 中国木樨地打铁记(3)游览纽约布鲁克林博物馆 Brooklyn Museum用这些开源工具在 Linux 上编辑 PDF 文件 | Linux 中国如何使用 Linux sed 命令自动进行文件编辑 | Linux 中国使用 Linux 上的开源财务工具 Skrooge 管理你的预算 | Linux 中国如何使用 Dockerfile 创建自定义 Docker 镜像 | Linux 中国湿漉漉的天气在 Windows 上使用开源屏幕阅读器 NVDA | Linux 中国使用 LaTeX 创建优美的 PDF 文件 | Linux 中国如何在 Linux 和 Windows 电脑之间共享文件 | Linux 中国检查 Linux 磁盘使用情况 | Linux 中国如何在 Ubuntu/Linux 和 Windows 之间共享文件夹 | Linux 中国Collision:用于验证 ISO 和其他文件的 Linux 应用 | Linux 中国用 ranger 在 Linux 终端管理你的文件 | Linux 中国神秘的 GeckoLinux 创建者推出了一个新的 Debian 合成发行版 | Linux 中国
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。