Выполнение программы останавливается во время цикла bash - PullRequest
0 голосов
/ 19 декабря 2018
#!/bin/bash
while read LINE
    do
[ ! -f /tmp/$(basename $0) ] && cp $0 /tmp/ && konsole -e $0 && exit
rm /tmp/$(basename $0) # open separate window for code to run
    $LINE << EOF # read line (ssh cmd)
    cd /st/task/ #commands during ssh
    ./start.sh #need something to let this run and go back to beginning
EOF
done < pdns.txt

, поэтому команда start.sh предназначена для непрерывной работы, но не позволяет циклу while повторять

1 Ответ

0 голосов
/ 19 декабря 2018

Я бы упростил этот цикл следующим образом:

  1. Создайте ssh файл конфигурации с именем "aws.config" (или как хотите, конкретное имя не важно)который определяет соответствующий псевдоним для каждого хоста, указывая необходимые параметры соединения.

    Host hostone
       User ubuntu
       Hostname blah.aws.com
       IdentityFile blah.pem
    
    Host hosttwo
       User someotheruser
       Hostname foo.aws.com
       IdentityFile bar.pem
    
    # etc
    
    Host *
        RequestTTY no
        RemoteCommand "cd /st/stack && ./start.sh"
    
  2. Входному файлу нужен только список псевдонимов хоста, определенный в файле конфигурации.

    $ cat pdns.txt
    hostone
    hosttwo
    # etc
    
  3. Теперь цикл может быть просто

    while IFS= read -r host; do
        konsole -e "ssh -F aws.config '$host'" &
        # If your version of ssh doesn't support RemoteCommand, use
        # konsole -e "ssh -F aws.config '$host' 'cd /st/stack && ./start.sh'"
    done < pdns.txt
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...