ssh 远程命令未按预期工作(读取问题)

use*_*271 4 linux ssh bash remote-execution

我的服务器上有一个名为test.sh

#!/bin/bash
read -p "Select an option [1-4]: " option
echo "You have selected $option"
Run Code Online (Sandbox Code Playgroud)

当我通过 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
Run Code Online (Sandbox Code Playgroud)

当我作为 ssh 远程命令运行它时,我看到以下内容:

me@me:~$ ssh root@server 'bash test.sh'
root@server's password: 
48
You have selected 48
Run Code Online (Sandbox Code Playgroud)

我对此输出不满意,因为它缺少Select an option [1-4]:提示字符串和我从中派生的原始脚本test.sh包含很多这样的交互式对话字符串,我需要它们全部。

我知道会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
Run Code Online (Sandbox Code Playgroud)

为什么会发生这种情况以及如何使 ssh 远程命令按预期工作?

UPD

我已将其更改test.sh为:

#!/bin/bash
echo Connected
read -p "Select an option [1-4]: " option
echo "You have selected $option"
Run Code Online (Sandbox Code Playgroud)

但输出仍然缺少提示字符串:

me@me:~$ ssh root@server 'bash test.sh'
root@server's password: 
Connected
66
You have selected 66
Run Code Online (Sandbox Code Playgroud)

anu*_*ava 5

您需要使用-t选项 inssh为会话分配伪终端ssh

ssh -q -t root@server 'bash test.sh'
Run Code Online (Sandbox Code Playgroud)