0

我有一个 bash 脚本,它将一行文本打印到一个文件中,然后调用第二个脚本将更多数据打印到同一个文件中。让我们称它们为 script1.sh 和 script2.sh。它被分成两个脚本的原因是因为我有不同版本的 script2.sh。

脚本1.sh:

rm -f output.txt
echo "some text here" > output.txt
source script2.sh

脚本2.sh:

./read_time >> output.txt
./run_program
./read_time >> output.txt

重复 script2.sh 中三行的变化。

这似乎在大多数情况下都有效,但每隔一段时间,文件 output.txt 不包含“some text here”行。起初我以为是因为我是这样调用 script2.sh 的:./script2.sh。但即使使用source问题仍然存在。该问题不可重现,因此即使我尝试更改某些内容,我也不知道它是否真的已修复。

这可能是什么原因造成的?

编辑:脚本非常简单。script1 与您在此处看到的完全相同,但文件名不同。脚本 2 是我发布的,但随后重复了相同的 3 行,并且./run_program可以有不同的参数。我为输出文件做了一个 grep,>但它并没有出现在任何意想不到的地方。

这些脚本的使用方式是 script1 是由程序创建的(版本之间的唯一区别是source script2.sh行。然后使用 ssh 在另一台计算机(实际上是 FPGA 上的 linux)上运行此 script1.sh。在此之前完成,输出文件也是用ssh删除的。不知道为什么,但我没有写这一切。另外,我检查了主机上运行的代码。输出文件唯一提到的是当它使用 ssh 删除,并且在 script1 完成后将其复制回主机时。

编辑 2:我终于设法通过剥离 script2.sh 的所有内容,但单行打印到文件中,以合理的速度重现问题。这也让我可以更快地进行测试。一旦我遇到了这个问题,我每运行 10 次就会遇到 1 到 4 次问题。在脚本运行之前删除通过 ssh 删除文件的命令似乎已经解决了问题。我将对其进行更多测试以确定,但我认为它已经解决了。尽管我仍然不确定为什么会出现问题。我认为在执行所有删除命令之前 ssh 命令不会退出。

4

2 回答 2

1

你能把你所有的脚本都用 grep 写成'output.txt'吗?那么在 read_time 和 run_program 中调用的脚本呢?

看起来 script2.sh 脚本之一中的某些内容必须覆盖、截断或对 output.txt 进行替换。

例如,可能有一个“> output.txt”隐藏在一个条件中,用于一个很少获得的条件。只是一个猜测,但它可以解释为什么你并不总是看到它。

这是一个有趣的问题。找到后请贴出解决方案!

于 2013-05-30T19:39:46.143 回答
1

没有看到真正的代码很难说。最可能的解释是您在其中一个 script2.sh 文件中的某处有错字,>而不是。>>

要验证这一点,noclobber请使用 设置选项set -o noclobber。然后,当尝试使用 写入现有文件时,shell 将终止>

另一种可能性是文件在某些​​罕见的情况下被删除。或者它被一些可以随机访问它的命令损坏 - 查找使用此文件的命令而不使用>>. 或者它被某些命令用作输入和输出,它们相互叠加 - 查找与 . 一起使用的文件<

最后,您可以通过在后台输出到文件的命令来获得比赛条件,在此之前开始echo

于 2013-05-30T19:02:01.047 回答