Заменить команду результатом (выводом команды) в строке с помощью sed

Если у вас есть «не отвечающая» зависимость, вы можете просто продолжить работу без exit 1и еще несколько раз повторить попытку соединения ssh:

for i in $host
do
        counter=0
        while [ $counter -ne 3 ]; do
        #       echo "Shutting down Host in $Region with ip addrss $i"
                ssh -o ConnectTimeout=10 -i $key_path -p 2222 $user@$i "sudo init 0" &> /dev/null
                if [ $? -ne  0 ]; then
                   echo "$i is shutdown!"
                   counter=3
                else
                   echo "There is some issue, try again"
                   counter=$(($counter+1))
                fi
        done
done
0
04.09.2019, 22:06
2 ответа

Некрасиво, но

$ echo '2 + 2 = $$shell:echo 2 + 2 | bc$$ // and some text here' | 
  sed -e 's/\(.*\)\$\$shell:\(.*\)\$\$\(.*\)/printf "%s%s%s\n" "\1" "$(sh -c "\2")" "\3"/e'
2 + 2 = 4 // and some text here
0
28.01.2020, 02:39

Вы можете использовать Perl...

perl -pe 's[\$\$shell:(.*?)\$\$][ qx($1) =~ s/\n$//r ]ge' < inputfile

(qxэквивалентно подстановке команд, за исключением того, что она не удаляет завершающие символы новой строки, поэтому это делает =~ s/\n$//r. Окружение s[][]ge— это просто обычная замена с Perl-выражением в замене.)

2
28.01.2020, 02:39

Теги

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