Команда SSH Remote не работает должным образом (проблемы с чтением)

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

1 ответ

Решение

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

ssh -q -t root@server 'bash test.sh'
Другие вопросы по тегам