Интересно, как создать трубу
program 1 |... | program N
где несколько программ запрашивают ввод данных пользователем. Проблема в том, что |
запускает программы параллельно и, таким образом, они начинают читать с терминала параллельно.
Для таких случаев было бы полезно иметь конвейер |
, который запускает программу (i+1 )только после того, как программа i произвела некоторый вывод.
Изменить:
Пример:
cat /dev/sda | bzip2 | gpg -c | ssh user@host 'cat > backup'
Здесь как gpg -c
, так и ssh
запрашивают пароль.
Обходной путь для этого конкретного примера — создание пар ключей ssh, но это возможно не в каждой системе, и мне было интересно, существует ли общее решение. Также gpg позволяет передавать фразу-пароль в качестве аргумента командной строки, но это не рекомендуется из соображений безопасности.