我一直在写一个脚本,它的怪异行为让我抓狂,但我设法找到了可能的问题:像这样的命令替换
out="$(ping google.com)"
如果在互联网不可用时完成,则将其输出到终端
ping: google.com: Temporary failure in name resolution
尽管根据我的理解,被替换的命令是在子shell中运行的,因此该命令的输出不应进入stdout,而只能作为变量的值传递。事实上,如果在互联网可用的情况下执行,则命令替换不会像预期的那样向终端输出任何内容。
我不确定这是否是导致我的脚本出现问题的原因,因为我正在运行一个稍微复杂一点的命令(out="$(timeout 5 ping google.com | grep -c failure)"
(,但我的理论是,发生了一些奇怪的事情,用变量和替换打乱了后面的操作。
为什么会发生这种情况?为什么只有当ping命令无法访问google.com时才会发生这种情况?谢谢你抽出时间。
输出不会进入stdout,而是进入stderr,并直接打印到终端。使用out="$(ping google.com 2>&1)"
获取out变量中的所有输出(stderr和stdout(,或者考虑为命令使用退出代码。