Выход из сценария Bash при ошибке команды (sshpass)

Новые системы по своей конструкции не позволяют использовать графические приложения с правами root (это особенность Wayland ). Обходной путь:

$ xhost si:localuser:root
$ sudo...your-graphical-app...

Восстановить разрешения по умолчанию:

$ xhost -si:localuser:root
0
08.01.2020, 11:02
1 ответ

ssh наследует стандартный входной поток от цикла и считывает из него как можно больше, то есть он будет читать оставшиеся строки из вашего файла address-list. Поскольку sshсчитывает оставшиеся строки из файла, цикл будет выполнять только одну итерацию. Технически сценарий не завершается преждевременно и не завершается каким-либо образом, он просто не делает того, что вы хотите.

Чтобы избежать этого, используйте ssh -n, чтобы запретить sshчтение со стандартного ввода:

while read address; do
    echo -n "$address "
    sshpass -p password ssh -n -o StrictHostKeyChecking=no "user@$address" 'ls /path/to/some/dir'
done < address-list

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

3
28.01.2020, 02:38

Теги

Похожие вопросы