bash脚本的奇怪行为

时间:2011-07-26 12:06:29

标签: linux bash ssh

我有以下script.sh:

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

当执行cat ./script.sh | bash时,我得到了

  来自server1的

你好

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

  来自server1的

你好

     来自server2的

你好

任何人都可以解释这个区别吗? :)

2 个答案:

答案 0 :(得分:3)

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

在第二种情况下,bash的stdin,也就是ssh,是你的终端,bash单独打开脚本文件,所以ssh无法看到它。

答案 1 :(得分:0)

第一个示例只是简单地将命令传递给bash,如果处理第一个命令则无关紧。 (第二个命令被bash吞噬)

你的第二个例子有效,因为bash只是逐行处理。

//更新:以下内容适用于您的第一个示例:

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