我有这个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。 塞巴斯蒂安。
答案 0 :(得分:0)
ping -W 3 -c 2 1.2.3.4 >> $LogFile
在ping选项之后输入IP /主机名。
答案 1 :(得分:0)
最有可能:
ping
由于参数顺序错误而失败:目标应该是最后一个。
您的脚本与-e
一起运行,因此它会在第一次出错时退出,因此会在ping
失败后停止。
您没有重定向ping
的标准错误:错误消息丢失
如果你删除-e
,ping
仍然失败,但脚本继续,执行最后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