Bash 临时日志文件

Bash 临时日志文件

我是 shell 编程的新手。

由于我需要提供一个专业的 shell 程序,有人可以帮助澄清以下三个主题吗:

  1. 创建临时文件然后在程序执行后删除这些文件的标准方法。

  2. 如何确定这些临时文件是在当前程序执行期间创建的,以便我们不会意外删除由同一程序的另一个实例创建的其他临时文件。

  3. 创建日志文件以记录命令执行期间发生的任何错误。

任何帮助深表感谢。

答案1

尝试 mktemp 命令。

mktemp 创建的文件在包含的目录中是唯一的。

#!/bin/bash
FILENAME=$(mktemp)
echo "Writing out data to $FILENAME"
echo "This is a test" > $FILENAME
rm $FILENAME

对于错误,考虑将错误写出到“标准错误”:

#!/bin/bash
echo "Everything is fine.."
sleep 1
echo "Oh dear. An error happened" 1>&2
exit

这样,您就可以将脚本错误重定向到文件。

$ ./myscript 2>/tmp/errors

或者,使用“logger”命令将您的日志发送到本地系统日志服务器。

#!/bin/bash
echo "Everything is fine.."
sleep 1
logger -t "MyApp" "Oh dear. An error happened"
exit

[根据评论编辑了更多信息:“但我需要知道如何创建具有可预测名称的临时文件,如“temp_file.test”,因为我想在我的程序中使用它”]

mktemp 也可以帮到你。如果你需要文件具有特定格式,你可以执行以下操作:

$ FILENAME=$(mktemp --tmpdir=/tmp temp_file-XXXXXXXXXX.txt)
$ echo $FILENAME
/tmp/temp_file-HIitKZc0MT.txt

我建议不要在可公开访问的目录中使用临时文件名(例如:始终使用“/tmp/MyTempFile.txt”) - 除非您非常小心,否则攻击者很容易做出一些恶意的事情,并可能给您的脚本带来问题 - 例如:

ln -s /etc/passwd /tmp/MyTempFile.txt
(run your application)

或(取决于您使用该文件的用途):

chmod 444 /tmp/MyFile.txt
echo "evil sql command perhaps" > /tmp/MyFile.txt

相关内容