Почему bash останавливает обработку скрипта? - PullRequest
0 голосов
/ 20 января 2012

Я создаю скрипт, подобный этому

(echo "ssh hans@mymachine.com echo hello" ; echo 'echo Done')

, который производит

ssh hans@mymachine.com echo hello
echo Done

Если я сохраню сгенерированный скрипт в файле

(echo "ssh hans@mymachine.com echo hello" ; echo 'echo Done') > a.sh

ивыполнить его

. ./a.sh

, затем он заработает oke и выдаст

Warning: No xauth data; using fake authentication data for X11 forwarding.
hello
Done

Если я выполняю скрипт, передавая эти команды в bash

(echo "ssh hans@mymachine.com echo hello" ; echo 'echo Done') | bash

Результатis

Warning: No xauth data; using fake authentication data for X11 forwarding.
hello

Как вы можете видеть, bash не выполнил команду 'echo Done'.

Моей первой мыслью было, что ssh, вероятно, выдает вероятностное значение ненулевого возвращаемого значения, вызванное этим предупреждением xauth.Итак, я сделал это

ssh hans@mymachine.com echo hello
echo $?

, что привело к

Warning: No xauth data; using fake authentication data for X11 forwarding.
hello
0

Так что возвращаемое значение равно oke.Теперь я попытался использовать ловушку

trap "" ERR

, но это также не помогло.Довольно логично, так как возвращаемое значение было равно нулю.

Так что я потерян.Почему команда 'echo Done' не выполняется?

ОБНОВЛЕНИЕ:

Я заметил, что когда я заключаю скрипт в скобки, он работает.Так

( echo "(" ; echo "ssh hans@mymachine.com echo hello" ; echo 'echo Done'; echo ")" ) | bash

производит

Warning: No xauth data; using fake authentication data for X11 forwarding.
hello
Done

1 Ответ

3 голосов
/ 20 января 2012

ssh потребляет стандартный ввод, который в данном случае является echo.Добавить -n.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...