У меня есть следующие два Баш скрипты:Баш Перенаправление дескриптор файла
one.bash:
#!/bin/bash
echo "I don't control this line of output to stdout"
echo "I don't control this line of output to stderr" >&2
echo "I do control this line of output to fd 5" >&5
callone.bash:
#!/bin/bash
# here I try to merge stdout and stderr into stderr.
# then direct fd5 into stdout.
bash ./one.bash 1>&2 5>&1
Когда я бегу это так: bash callone.bash 2>stderr.txt >stdout.txt
Файл stderr.txt выглядит так:
I don't control this line of output to stdout
I don't control this line of output to stderr
I do control this line of output to fd 5
и stdout пуст.
Я бы хотел, чтобы строка «do control» выводилась только на stdout.txt.
Ограничения на внесение изменений являются:
- я могу изменить что-либо в callone.bash.
- Я могу изменить строку в one.bash, которую я контролирую.
- Я могу добавить exec в one.bash, относящийся к файловому дескриптору 5.
- Мне нужно запустить скрипт, как указано.
[EDIT] Вариант использования для этого: у меня есть сценарий, который выполняет все виды других скриптов, которые могут выводиться на stderr и stdout. Но мне нужно убедиться, что пользователь видит только хорошо контролируемое сообщение. Поэтому я отправляю сообщение с контролируемым управлением в fd5, а все остальное (stdout & stderr) отправляется в журнал.
Забавная вещь, что когда трубы ввязываться, это * не * то же самое. – o11c
@ o11c, сначала устанавливается труба, затем перенаправления. См. Http://stackoverflow.com/a/12027221/1524545 – geirha
@ o11c Что не то же самое? –