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为我做的工作!!!