В скрипте bash я хотел бы выполнить команду при передаче stderr как в файл, так и в терминал. Однако я хочу, чтобы stderr оставался в файловом дескрипторе '2', чтобы я мог проанализировать его из внешнего процесса, вызывающего этот скрипт bash.
Все решения, которые я видел до сих пор, включают замену stdout на stderr, а затем переход к другому файлу, например :
find /var/log 3>&1 1>&2 2>&3 | foo.file
Если мне нужно вызвать этот скрипт из другого, stderr перейдет в stdout, а stdout перейдет в stderr, что мне не подходит. Я попытался поменять их снова так:
find /var/log 3>&1 1>&2 2>&3 | foo.file 4>&1 1>&2 2>&4
но это не работает
find
иногда будут десинхронизироваться в терминале. Это связано сtee
буферами и т. Д. Еслиfind
запись stdout и stderr записывается непосредственно на одно устройство, проблема никогда не возникает; но если два потока объединятся позже , это возможно.