为什么shell输出重定向到随机名称文件?

时间:2015-08-12 08:36:52

标签: linux bash shell

我写了一个crontab任务,每10分钟由cURL发出3个POST请求,这里是伪的:

#!/bin/sh
echo `date` >>/tmp/log
curl $a >>/tmp/log
curl $b >>/tmp/log
curl $c >>/tmp/log

这就是所有代码,但是在第一次回显到我的/ tmp / log后,其他输出被保存在随机文件名中,如“A6E0U9~D”,它不会一直发生,我没有线索为什么:(

PS。我不使用“$ a”,我使用从CHROME Dev Tool复制的原始字符串,其中一个在下面添加。并且每一行的输出都很好,唯一的问题是一些输出被重定向到随机名称文件。

删除cURL链接,因为它包含我的登录cookie

1 个答案:

答案 0 :(得分:1)

不是真正的解决方案,但您可以一次重定向所有内容的输出,而不是重复附加到同一个文件。

#!/bin/sh
{
    date
    curl ...
    curl ...
    curl ...
} > /tmp/log

这里的好处是所有输出都将出现在同一个文件中,无论该文件是/ tmp / log还是奇怪命名的文件。如果仍然以/ tmp / log之外的其他文件结束,那么您知道其中一个curl来电一定存在问题。

(请注意,捕获并重新打印date的输出是多余的。)

为了并行运行每个curl,您需要保存每个#!/bin/sh { date tmp1=$(mktemp) && curl ... > "$tmp1" & tmp2=$(mktemp) && curl ... > "$tmp2" & tmp3=$(mktemp) && curl ... > "$tmp3" & wait cat "$tmp1" "$tmp2" "$tmp3" } > /tmp/log rm "$tmp1" "$tmp2" "$tmp3" 的输出,并在完成后连接它们。

<span>