Захват результатов ожидаемого сеанса с помощью bash-скрипта - PullRequest
0 голосов
/ 20 ноября 2018

У меня есть скрипт bash, который использует xmlstarlet для манипулирования некоторыми парами ключ / значение в файле конфигурации приложения, чтобы подготовить файл для перемещения на новый рабочий хост.Значения, которые необходимо изменить, зависят от хоста / шифрования.

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

Ожидаемая часть сценария bash выглядит примерно так:

expect <<DONE
    spawn command_provided_by_vendor
    expect :
    send -- "newvalue\r"
DONE

Вот где я застреваю

В оболочкевывод этой команды выглядит следующим образом:

Encrypted value (case sensitive, please cut and paste): 2qIrRvcSoHMb55dpcef6vw==

Что мне нужно сделать, это захватить вывод без пробелов после «:», и все, что я пробовал, работает из-за ошибок регулярного выражения, скобка встрока подсказки и т. д.

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

Любая помощь, указатели приветствуются.

1 Ответ

0 голосов
/ 20 ноября 2018

Я бы использовал команду ожидаем, чтобы найти подходящее регулярное выражение и зафиксировать там значение:

value=$(
    expect <<DONE
        spawn command_provided_by_vendor
        expect :
        send -- "newvalue\r"
        expect -re {Encrypted value.*: (\S+)}
        puts $expect_out(1,string)
        expect eof
DONE
)
...