为什么ECHO没有出现?

时间:2017-05-19 08:01:00

标签: linux sh

我有这个shell:

===
#!/bin/sh -e

LogFile=/home/pi/logs/prova.log        # log file
test -e $LogFile || touch $LogFile     # create it if non existent

echo "(1) ======== ======== ======== Inici de PROVA.SH"     >>  $LogFile
echo "(2) ping 1.2.3.4"                                     >>  $LogFile
# ping  1.2.3.4  -W 3  -c 2                                   >>  $LogFile
echo "(3) start APP"                                        >>  $LogFile

echo "LOG file is" $LogFile
exit 0
===

输出

1)一行到屏幕

2)三行文件

但如果第8行(ping 1.2.3.4)未被注释, 第8行之后的“回声”不写, 既不是屏幕,也不是文件。

我需要了解原因,以及如何解决它。

我猜这与“ping”在另一个shell中运行的事实有关, 所以“回声”写在那里。

但我不知道如何解决它。

欢迎任何指向文档的指针或URL。 塞巴斯蒂安。

2 个答案:

答案 0 :(得分:0)

ping -W 3 -c  2 1.2.3.4 >>  $LogFile

在ping选项之后输入IP /主机名。

答案 1 :(得分:0)

最有可能:

  • ping由于参数顺序错误而失败:目标应该是最后一个。

  • 您的脚本与-e一起运行,因此它会在第一次出错时退出,因此会在ping失败后停止。

  • 您没有重定向ping的标准错误:错误消息丢失

  • 如果你删除-eping仍然失败,但脚本继续,执行最后2行并获得他们的输出(但是你没有从ping获得,因为这是标准错误)

解决方案,2个变化:

ping -W 3 -c 2 1.2.3.4    2>&1    >>  $LogFile
               ^^^^^^^    ^^^^
I.P as last argument  &   Redirect stderr to stdout before redirecting to file