我的服务器上有一个名为test.sh
的脚本:
#!/bin/bash read -p "Select an option [1-4]: " option echo "You have selected $option"
当我通过手动运行ssh时,我看到了这一点:
me@me:~$ ssh root@server root@server's password: [...] root@server:~# bash test.sh Select an option [1-4]: 48 You have selected 48
当我运行它作为SSH远程命令,我看到这一点:
me@me:~$ ssh root@server 'bash test.sh' root@server's password: 48 You have selected 48
我不满意这个输出,因为它缺lessSelect an option [1-4]:
提示string和从我派生的原始脚本test.sh
包含了很多这样的交互式对话string,我需要他们。
我知道read
打印提示到stderr
所以我试图用以下命令启动脚本,以防stderr被省略,但输出保持不变:
ssh root@server 'bash test.sh >&2' ssh root@server 'bash test.sh' >&2 ssh root@server 'bash test.sh 2>&1' ssh root@server 'bash test.sh' 2>&1
为什么会发生这种情况,以及如何使SSH远程命令按预期工作?
UPD
我已经将test.sh
更改为:
#!/bin/bash echo Connected read -p "Select an option [1-4]: " option echo "You have selected $option"
但输出仍然缺less提示string:
me@me:~$ ssh root@server 'bash test.sh' root@server's password: Connected 66 You have selected 66
您需要在ssh
使用-t
选项来为ssh
会话分配一个伪终端:
ssh -q -t root@server 'bash test.sh'