Bash ssh脚本没有';t将控件返回到父脚本
我试图在远程服务器上执行本地脚本,方法是将其写入Bash ssh脚本没有';t将控件返回到父脚本,bash,shell,ssh,ubuntu-12.04,Bash,Shell,Ssh,Ubuntu 12.04,我试图在远程服务器上执行本地脚本,方法是将其写入ssh命令的标准输入。脚本运行正常,但是ssh没有退出:它只是挂起,控件不会返回到父脚本 父外壳: for HOSTNAME in ${HOSTS} ; do ssh -t -t $HOSTNAME "bash -s" < ~backup_conf.sh done 我已经编写了“退出”,但是控件没有返回到父脚本。 它挂起在远程服务器上…:(将退出状态写入远程主机上的一个文件中,然后使用ssh/scp/sftp从远程主机中选择它 直
ssh
命令的标准输入。脚本运行正常,但是ssh
没有退出:它只是挂起,控件不会返回到父脚本
父外壳:
for HOSTNAME in ${HOSTS} ; do
ssh -t -t $HOSTNAME "bash -s" < ~backup_conf.sh
done
我已经编写了“退出”,但是控件没有返回到父脚本。
它挂起在远程服务器上…:(将退出状态写入远程主机上的一个文件中,然后使用ssh/scp/sftp从远程主机中选择它
直接通过ssh,您将无法从另一台主机获得退出状态。将退出状态写入远程主机上的一个文件中,然后使用ssh/scp/sftp从远程主机中选择它
直接通过ssh,您将不会从另一台主机获得退出状态。罪魁祸首是调用代码中的
bash-s
行,它仍然希望使用ctrl-C
结束输入:
请尝试以下方法:
for HOSTNAME in ${HOSTS} ; do
ssh -t -t $HOSTNAME "bash ~backup_conf.sh"
done
罪魁祸首是调用代码中的
bash-s
行,它仍然希望使用ctrl-C
结束输入:
请尝试以下方法:
for HOSTNAME in ${HOSTS} ; do
ssh -t -t $HOSTNAME "bash ~backup_conf.sh"
done
这是不正确的。ssh确实通过通道传输退出状态。此外,他没有抱怨退出状态,而是抱怨ssh进程在远程脚本运行后未终止。这是不正确的。ssh确实通过通道传输退出状态。此外,他没有抱怨退出状态,而是抱怨ssh进程未终止一次远程脚本已运行。此处不需要
-s
——命令将在没有它的情况下从stdin读取。同样,如果您正在运行任何使后台作业运行(或其他输出到终端)的操作,则不需要显式退出,这将是非常有意义的。顺便说一句,我建议不要在这里使用-t
,让终端严格非交互使用是没有意义的。您可能会小心远程端上的任何启动脚本启动后台进程,保持终端打开。将-x
传递到您正在启动的shell以进行任何操作沿着这些路线发生的事情更加清晰可见。感谢Charles和Anubhava删除-s为我完成了这项工作!!!这里不需要-s
,命令将在没有它的情况下从stdin读取。同样,如果您运行的是任何让后台作业运行(或其他输出到终端)的操作,则不需要显式退出,这将是非常有意义的。顺便说一句,我建议不要在这里使用-t
,让终端严格非交互使用是没有意义的。您可能会小心远程端上的任何启动脚本启动后台进程,保持终端打开。将-x
传递到您正在启动的shell以进行任何操作沿着这些路线发生的事情更加明显。感谢查尔斯和阿努巴瓦移除-s为我做的工作!!!