Простой сценарий Ожидание еще - PullRequest
0 голосов
/ 09 февраля 2020

Я пытался запустить команду и ожидал вывода, и я готов к go, но я просто не могу получить правильный синтаксис, что делать, если я не получаю ожидаемый вывод.

#!/usr/bin/expect -f
set timeout -1
spawn ./container_check
expect -- "*wpa_supplicant-udmpro:v1.0*"
send -- "exit\r"
else -- "podman container start wpa_supplicant-udmpro\r"
expect eof

Я хочу, чтобы скрипт завершился, если он видит ответ wpa_supplicant, но я также хочу, чтобы он запускал "podman container start wpa_supplicant-udmpro", если он этого не делает, и я не могу его получить сделай это.

#!/usr/bin/expect -f
set timeout -1
spawn ./container_check
if [ expect "*wpa_supplicant-udmpro:v1.0*" ];
    then { send "exit\r"; }
else { send "podman container start wpa_supplicant-udmpro\r"; }
expect eof
fi

Еще одна попытка, я понятия не имею, что я делаю LOL

1 Ответ

0 голосов
/ 09 февраля 2020

У меня такое ощущение, что команду "podman" следует отправлять в ОС, а не в программу "container_check". Если это правда, то, возможно, это все, что вам нужно:

Если «container_check» выходит из нуля или отправляет что-либо в stderr, exec выдаст ошибку, и это нужно отловить:

#!/usr/bin/expect -f
if {[catch {exec ./container_check 2>@1} check_output] != 0} {
    # a non-zero exit status: do we care?
}
if {![string match "*wpa_supplicant-udmpro:v1.0*" $check_output]} {
    exec podman container start wpa_supplicant-udmpro
}

ref: exe c, string

Если программа container_check действительно требует взаимодействия, то я ошибаюсь.


Поскольку вы используете sshpass, вам не нужно взаимодействовать с процессом s sh: ожидайте, что это неправильный инструмент для этой работы. Придерживайтесь простого bash сценария.

#!/bin/bash
doSsh() {
    sshpass -p "password" ssh -o StrictHostKeyChecking=no username@ipaddress "$@"
}

if [[ "$( doSsh docker container ls )" != *"wpa_supplicant-udmpro:v1.0"* ]]; then
    doSsh podman container start wpa_supplicant-udmpro
fi
...