Запустить команду при помощи скрипта в уже запущенной утилите силами shell

Суть вопроса в следующем:

Есть последовательность действий в консоли: Поочерёдный запуск команд - Запуск отдельной утилиты - Поочерёдный запуск команд

Я хочу это всё автоматизировать, написав .sh-ник. Я упёрся в то, что запуск первых команд проходит успешно, потом запускается утилита (принимающая уже свои команды) и я совершенно не имею представления, как можно в эту утилиту засунуть команду силами /bin/sh. Есть у кого-нибудь идеи?

Выглядит всё примерно так:

command1
command2
command_for_utility_launch
utility_command1
utility_command2
utility_exit_command
command3

Ответы (3 шт):

Автор решения: Ainar-G

Многие интерпретаторы принимают команды из stdin, поэтому можно использовать перенаправления (также «пайпы», от англ. «pipes»). Вот пример с psql:

echo "one"
echo "two"
echo '
SELECT 3;
SELECT 4;
' | env PGPASSWORD="postgres" psql -U "postgres"
echo "five"
→ Ссылка
Автор решения: eri

Если утилита умеет принимать пайп, то так

command1
command2

cat << EOF | command_for_utility_launch

utility_command1
utility_command2
utility_exit_command

EOF

command3

П.С. через echo не удобно писать многострочные команды

→ Ссылка
Автор решения: PotroNik

На случай если команда не поддерживает прием из 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/

→ Ссылка