Bash-命令替换$(ping google.com)输出到终端



我一直在写一个脚本,它的怪异行为让我抓狂,但我设法找到了可能的问题:像这样的命令替换

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(,或者考虑为命令使用退出代码。

最新更新