linux - bash脚本的奇怪行为

标签 linux bash ssh

我有以下 script.sh:

#!/bin/bash
ssh server1 "echo hello from server1"
ssh server2 "echo hello from server2"

当作为 cat ./script.sh | 执行时bash 我明白了

hello from server1

当它作为 bash ./script.sh 执行时,我得到了

hello from server1

hello from server2

谁能解释一下区别? :)

最佳答案

在第一种情况下,cat 的输出连接到 bash 和 ssh 的标准输入。 ssh 从它的 stdin 读取,因此消耗了 cat 的其余输出,尽管在这种情况下结果被丢弃,因为远程命令本身从不读取 stdin。

在第二种情况下,bash 和 ssh 的标准输入是您的终端,bash 单独打开脚本文件,因此 ssh 看不到它。

关于linux - bash脚本的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6829750/

相关文章:

Linux 脚本错误-意外 token fi 附近的语法错误

linux - 如何仅显示 wget 进度条?

linux - 引用另一个文件中没有标签的预定义设备树节点

mysql - ssh & shell & mysql 中的条件命令

ruby - vagrant ssh 在 Windows 上的 MobaXterm 中不起作用

linux - 如何替换 CSV 文件中的所有换行符,包括最后一个

linux - bash 中的 echo 表达式

bash - 如何将 foo ='bar baz' 传递给来自 cli 参数的命令

linux - GNU make 的安装目标是将文件推送到远程 SSH?

Python: os.environ.get ('SSH_ORIGINAL_COMMAND' ) 返回 None