Запустить команду при помощи скрипта в уже запущенной утилите силами shell
Суть вопроса в следующем:
Есть последовательность действий в консоли: Поочерёдный запуск команд - Запуск отдельной утилиты - Поочерёдный запуск команд
Я хочу это всё автоматизировать, написав .sh-ник. Я упёрся в то, что запуск первых команд проходит успешно, потом запускается утилита (принимающая уже свои команды) и я совершенно не имею представления, как можно в эту утилиту засунуть команду силами /bin/sh. Есть у кого-нибудь идеи?
Выглядит всё примерно так:
command1
command2
command_for_utility_launch
utility_command1
utility_command2
utility_exit_command
command3
Ответы (3 шт):
Многие интерпретаторы принимают команды из stdin, поэтому можно использовать перенаправления (также «пайпы», от англ. «pipes»). Вот пример с psql:
echo "one"
echo "two"
echo '
SELECT 3;
SELECT 4;
' | env PGPASSWORD="postgres" psql -U "postgres"
echo "five"
Если утилита умеет принимать пайп, то так
command1
command2
cat << EOF | command_for_utility_launch
utility_command1
utility_command2
utility_exit_command
EOF
command3
П.С. через echo не удобно писать многострочные команды
На случай если команда не поддерживает прием из stdin на помощь придет expect
Не знаю как сейчас, но в старых дистрибутивах из коробки не шел, поэтому требуется установка для начала
...
expect -c 'spawn command_for_utility_launch
expect "Если есть текст приветствия ПО писать тут"
send -- "utility_command1\r"
send -- "utility_command2\r"
send -- "utility_exit_command\r"'
...
На хабре есть статься: https://habr.com/ru/company/ruvds/blog/328436/