Конечная цель состоит в том, чтобы мой скрипт bash выполнял команду на нескольких серверах. Я почти это настроил. Моя аутентификация SSH работает, но этот простой цикл while убивает меня. Когда я исполняю время цикла, читая мой файл для имен хостов, он отлично работает, когда я запускаюwhile loop to read file заканчивается преждевременно
SSH $ HOST «uname -a»
но при попытке выполнить другую команду SSH ,
SSH $ HOST "oslevel -s"
цикл, а заканчивается рано! Я не могу понять. Зачем нужно, чтобы цикл while read do отлично работал с первой командой, но не при добавлении второй?
У меня есть простой текстовый файл hosts.list, который имеет 4 имени хоста, по одному в каждой строке.
$ cat hosts.list
pcced1bip04
pcced1bit04
pcced1bo02
pcced1bo04
$ cat getinfo.bash
#!/bin/bash
set -x
while read HOST
do
echo $HOST
ssh $HOST "uname -a"
#ssh $HOST "oslevel -s"
echo ""
done < hosts.list`
Когда он работает, он отлично работает. Он проходит через файл, строит строку и получает результаты "uname -a"
. Так что все в порядке, не так ли? (Извините, но я включил set -x
).
$ ./getinfo.bash
+ read HOST
+ echo pcced1bip04
pcced1bip04
+ ssh pcced1bip04 'uname -a'
AIX pcced1bip04 1 6 0001431BD400
+ echo ''
+ read HOST
+ echo pcced1bit04
pcced1bit04
+ ssh pcced1bit04 'uname -a'
AIX pcced1bit04 1 6 0001431BD400
+ echo ''
+ read HOST
+ echo pcced1bo02
pcced1bo02
+ ssh pcced1bo02 'uname -a'
AIX pcced1bo02 1 6 0009FE2AD400
+ echo ''
+ read HOST
+ echo pcced1bo04
pcced1bo04
+ ssh pcced1bo04 'uname -a'
AIX pcced1bo04 1 6 0009FE2AD400
+ echo ''
+ read HOST
$
Проблема возникает, когда я включить строки [SSH $ HOST "oslevel -s"]. Когда я это делаю, скрипт только считывает первую строку файла, а затем останавливается. Почему он не переходит на другие линии?
$ ./getinfo.bash
+ read HOST
+ echo pcced1bip04
pcced1bip04
+ ssh pcced1bip04 'uname -a'
AIX pcced1bip04 1 6 0001431BD400
+ ssh pcced1bip04 'oslevel -s'
6100-06-02-1044
+ echo ''
+ read HOST
$
Если у меня была проблема с моим сценарием, почему это работает прекрасно с только [ssh $HOST "uname -a"]
в то время цикла?
возможно дубликат [SSH в Bash Script портя File Read] (http://stackoverflow.com/questions/6585100/ssh-in-bash-script-messing-up-file-read) –
@ Игнасио Васкес-Абрамс. Кроме того, есть еще одно решение. Кроме того, если пользователь каким-то образом хочет взаимодействовать с 'ssh', который не может быть использован. – konsolebox
@konsolebox Это, возможно, причина для написания лучшего ответа на этот другой вопрос, а не для разделения фокуса. (Да, я отвечаю здесь, но я тоже * голосую, чтобы закрыть). –