我有以下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的你好
任何人都可以解释这个区别吗? :)
答案 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" &