Я написал скрипт bash rm_remote_file.sh
, который ssh установил на удаленных машинах и удалил файл.Я использовал &
в конце каждого вызова функции для параллельного выполнения этих команд, скрипт выглядит следующим образом:
#!/bin/bash
rm_remote_file() {
echo "Removing file on node $1:"
ssh $1 'rm ~/test_file'
}
for node in node1.com node2.com node3.com; do
rm_remote_file $node &
done
Когда test_file существует на каждом узле - команда rm
завершается успешно - выводэтого сценария:
Removing file on node node1.com:
Removing file on node node2.com:
Removing file on node node3.com:
Я предпочитаю распечатывать каждое имя хоста.Однако, если файл test_file не существует на каждом узле - команда rm
завершается неудачно - вывод этого сценария будет следующим:
rm: cannot remove ‘~/test_file’: No such file or directory
rm: cannot remove ‘~/test_file’: No such file or directory
rm: cannot remove ‘~/test_file’: No such file or directory
Таким образом, печать имен узлов узлов подавляется этим сообщением об ошибке,Я думаю, что это поведение как-то связано с перенаправлением ввода-вывода, и использование таких вещей, как 2>&1
, может решить проблему.Но я хотел бы знать, почему сообщение об ошибке команды ssh подавляет команду echo.
Обратите внимание, что это происходит только с командой ssh, следующий скрипт, который просто удаляет некоторые локальные файлы, выведет как «Удаление файла», так и «Нет такого файла или каталога».
#!/bin/bash
rm_file() {
echo "Removing file..."
rm ./$1
}
for file in test1 test2 test3 test4 test5; do
rm_file $file &
done