user619271
user619271

Reputation: 5022

ssh remote command not working as expected (problems with read)

I have a script on my server named test.sh:

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

When I run it through ssh manually, I see this:

me@me:~$ ssh root@server
root@server's password:
[...]
root@server:~# bash test.sh
Select an option [1-4]: 48
You have selected 48

When I run it as ssh remote command, I see this:

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

I am unsatisfied with this output because it's missing Select an option [1-4]: prompt string and the original script which from has I derived test.sh contains a lot of interactive dialogue strings like this and I need them all.

I know that read prints it's prompt to stderr so I tried to start the script with following commands in case if stderr is omitted, but the output stays still the same:

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

Why this is happening and how to make ssh remote command work as expected?

UPD

I have changed the test.sh to this:

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

but the output still missing the prompt string:

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

Upvotes: 4

Views: 6180

Answers (1)

anubhava
anubhava

Reputation: 785991

You need to use -t option in ssh to assign a pseudo-terminal to ssh session:

ssh -q -t root@server 'bash test.sh'

Upvotes: 5

Related Questions