У меня есть небольшая программа, давайте назовем ее «программа» по простоте, которая имеет «нормальное» поведение.Он берет информацию из стандартного ввода (обычно вводится пользователем на клавиатуре) и печатает через stdout / stderr.Я хочу автоматизировать процесс и, следовательно, перенаправить stdout / stderr в «мой маленький скрипт bash» (который также может быть другой программой на C / C ++).Он принимает его как стандартный ввод и фильтрует его.Это означает, что нужно оставить неважную информацию и добавить дополнительную информацию, сгенерированную самим bash-скриптом.Вывод отображается на экране (распечатывается командой echo).
Пока это работает:
program --verbose 2>&1 | ./mylittlebashscript.sh
Схема:
stdin +---------------+ +---------------+
--------->| |--stdout--+-->| my |-->screen
| program | | | little |
| |--stderr--| | bash script |
+---------------+ +---------------+
Теперь яхочу пойти еще дальше: программа ожидает ввода от пользователя, который я хочу автоматически передать с помощью моего маленького скрипта bash.Например, он предлагает пользователю ввести путь к определенному файлу.Путь известен моему маленькому скрипту bash, а скрипт bash знает, когда программа ожидает ввода (так как последняя распечатанная строка содержит что-то, что «greped»).Как я могу вернуть некоторую информацию из моего скрипта bash?Я не хочу передавать обратно весь стандартный вывод, потому что на экране должна отображаться только некоторая информация, и программа не хочет выводить ее.
Новая схема:
(stdin?) +---------------+ +---------------+ (stdout?)
-------+->| |--stdout--+-->| my |-->screen
| | program | | | little |
| | |--stderr--+ | bash script |----+(maybe
| +---------------+ +---------------+ | stderr?)
| |
+------------------------------------------------------+
Намомент, когда я еще не очень знаком с Linux.Я предполагаю, что есть возможность работать с cat, fifos, tee и pipe / перенаправлениями.К сожалению, я до сих пор не воплотил это в жизнь.
Я был бы действительно рад маленькому примеру!Большое спасибо!
Cheers Matthias
PS: я думаю, что этот поток связан: как перенаправить стандартный вывод 2-го процесса обратно в стандартный поток 1-го процесса?
Редактировать: Хорошо, для более подробного объяснения я взял свои тестовые файлы с моей тестовой машины:
Я заменил «программу» другим пакетным файлом с именем input.sh :
#!/bin/bash
echo "input.sh: give me input, waiting for input 1"
read x
echo $x
echo "input.sh: give me input, waiting for input 2"
read x
echo $x
И я получил второй ("mylittlebashscript.sh"), который теперь называется inter.sh для обработки:
#!/bin/bash
echo "inter.sh: start"
while read line ; do
echo "inter.sh: line>$line"
notfound=$(echo $line | grep "waiting")
if [[ "$notfound" ]]; then
echo "inter.sh: input sh seems to wait for input! putting something in the fifo"
#echo "banana" > testfile
#echo "I am the stderr" >&2
fi
done
echo "inter.sh: end"
exit