如何让 bash 写入 trace.log、trace1.log 等等?

如何让 bash 写入 trace.log、trace1.log 等等?

我正在编写一个脚本,如果存在的话,我想将其写入另一个文件?

traceroute google.com > trace.log

任何帮助都将不胜感激。
另外,我是新手,所以举个例子会很有帮助。
谢谢。

答案1

以下是一种方法:

#!/bin/sh
n=
while true
do
    fname="trace$n.log"
    [ -f "$fname" ] || break
    n=$(($n+1))
done
traceroute google.com >"$fname"

上述代码依次循环遍历每个潜在名称,,,,等等trace.log。当它第一次发现一个不存在的名称时,它会跳出循环并运行您的命令。trace1.logtrace2.logtraceroute

警告:此脚本不会尝试处理竞争条件。具体来说,在脚本检查文件是否存在之后但在此脚本打开该文件进行写入之前,会有那么一瞬间。在那一瞬间,另一个正在运行的程序可能会尝试创建该文件。如果您担心这种情况(这种情况不太可能发生),则需要采用更复杂的方法。

相关内容