Странное поведение bash-скрипта - PullRequest
1 голос
/ 26 июля 2011

У меня есть следующий скрипт .sh:

#!/bin/bash
ssh server1 "echo hello from server1"
ssh server2 "echo hello from server2"

При выполнении этого как cat ./script.sh | bash я получаю

привет с сервера1

И при выполнении этого как bash ./script.sh я получаю

привет с сервера1

привет с сервера2

Кто-нибудь может объяснить разницу? :)

Ответы [ 2 ]

3 голосов
/ 27 июля 2011

В первом случае выход cat подключен к стандартному входу bash и ssh.ssh читает из своего стандартного ввода, следовательно, потребляет оставшуюся часть вывода команды cat, хотя в этом случае результат отбрасывается, поскольку удаленная команда сама никогда не читает стандартный ввод.

Во втором случае стандартный ввод для bashssh, ваш терминал, и bash открывает файл скрипта отдельно, поэтому ssh не видит его.

0 голосов
/ 26 июля 2011

В первом примере вы просто отправляете команды в bash, и все равно, обрабатывается ли 1-я команда. (2-я команда проглатывается командой bash)

Ваш второй пример работает, потому что bash просто обрабатывает построчно.

// Обновление: в вашем первом примере должно работать следующее:

#!/bin/bash
ssh server1 "echo hello from server1" &
ssh server2 "echo hello from server2" &
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...