Удаленная команда ssh не работает должным образом (проблемы с чтением)

У меня есть скрипт на моем сервере с именем 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

Я недоволен этим выводом, потому что в нем отсутствует строка подсказки 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

Почему это происходит и как заставить удаленную команду ssh работать должным образом?

UPD

Я изменил test.sh на это:

#!/bin/bash
echo Connected
read -p "Select an option [1-4]: " option
echo "You have selected $option"

но в выводе по-прежнему отсутствует строка приглашения:

me@me:~$ ssh root@server 'bash test.sh'
root@server's password: 
Connected
66
You have selected 66

person user619271    schedule 23.08.2017    source источник
comment
Я обновил вопрос. Подсказка по-прежнему отсутствует.   -  person user619271    schedule 23.08.2017
comment
Если вы просто хотите напечатать строку, используйте echo для печати строки, а затем используйте read для чтения значения. Это обходной путь.   -  person Lohit Gupta    schedule 23.08.2017


Ответы (1)


Вам нужно использовать опцию -t в ssh, чтобы назначить псевдотерминал для сеанса ssh:

ssh -q -t root@server 'bash test.sh'
person anubhava    schedule 23.08.2017