考虑脚本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运行时,会收到空的 stdintail命令会消耗掉什么,什么也不输出,
因此 ssh shell终止而没有任何输出。就这样。

s2更改为此,以查看区别:
#!/bin/bash 
ls / | ./s2 & 
wait 

这样 s2可以使用一个非空的 stdin
并且应该产生一些输出。

顺便说一句,由于有了 sleep 1000,所以从一开始就不需要 wait


评论关闭
IT序号网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!