У меня есть скрипт на моем сервере с именем 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
echo
для печати строки, а затем используйтеread
для чтения значения. Это обходной путь. - person Lohit Gupta   schedule 23.08.2017