Я создаю скрипт, подобный этому
(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