考虑脚本s2:
#!/bin/bash
ssh localhost tail
和脚本s1
#!/bin/bash
./s2 &
sleep 1000
wait
现在调用s1。它不会调用ssh命令。
如果您在s1中删除&,它将删除。
如果直接调用./s2,它将。
如果您输入控制台./s2,它将。
但是./s1无效。为什么呢
最佳答案
I don't know for me it does not call the ssh command. If i remove the sleep then it exits immediately.
确保它调用了
ssh
命令。一定要!没有魔术。假定仅仅因为删除
sleep
时脚本立即退出而没有调用ssh
,这是一个很大的错误。这个结论是不正确的。
可能还有其他原因来解释这种观察到的行为。
如果您想验证
ssh
没有运行,一种方法是查看系统日志。
该脚本很快退出(不是立即退出),因为
ssh
很快退出了。s2
运行时,会收到空的stdin
,tail
命令会消耗掉什么,什么也不输出,因此
ssh
shell终止而没有任何输出。就这样。将
s2
更改为此,以查看区别:#!/bin/bash
ls / | ./s2 &
wait
这样
s2
可以使用一个非空的stdin
,并且应该产生一些输出。
顺便说一句,由于有了
sleep 1000
,所以从一开始就不需要wait
。
关于bash - Bash subshell用ssh命令非常奇怪的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47067478/