bash - Bash subshel​​l用ssh命令非常奇怪的行为

标签 bash shell unix ssh

考虑脚本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

关于bash - Bash subshel​​l用ssh命令非常奇怪的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47067478/

相关文章:

unix - ps按开始时间排序结果

linux - 释放 bash 脚本使用的内存

bash - 如何将目录文件列表存储到数组中?

bash - 在旧版本的 Bash 上需要替代 readarray/mapfile 的脚本

windows - 为什么在管理员模式下运行时不能使用批处理 XCOPY?

linux - 根据其他列的值创建一个新列

linux - ksh shell 脚本查找字符串中第一次出现的 _ 并删除所有内容,直到出现

linux - 如何显示空磁盘空间

bash - 无密码登录

ruby-on-rails - su - $USER -p -c "$CMD"未访问路径