1

Я пытаюсь перенаправить все свои выходные данные в a.out , кроме некоторых, которые также должны быть записаны в b.out . Я думаю, что было бы неплохо использовать exec поверх tee (tee также перенаправить на b.out), но tee не всегда выглядит одинаково (похоже, работает только последний):

#!/bin/bash
exec > a.out
ls /boot |tee  b.out  #redirected to a.out only!
ls /var  |tee  b.out  #redirected to a.out only!
ls /run  |tee  b.out  #redirected to a.out only!
ls /home |tee  b.out  #redirected to a.out and b.out (good)
echo "a"              #redirected to a.out (good)

То же самое для кш. Для информации, ни один из ls не вызывает ошибку. Почему иногда не удается распознать вывод?

1 ответ1

4

Каждый tee открывается b.out самостоятельно и перезаписывает его самостоятельно. В самом конце вы видите b.out из последней tee (обратите внимание, что это не зависит от предыдущего exec , поэтому первоначальный заголовок вопроса « tee inside exec , случайное поведение перенаправления» был довольно обманчивым).

Если вы проверили b.out между tee , вы заметили, что он содержит только выходные данные предыдущей tee . Вы можете сделать это, набрав ваши команды одну за другой (без перенаправления на a.out) и вызывая cat b.out после каждого.

Перенаправление на a.out несколько отличается. Когда вы exec a.out открыт оболочкой только один раз , и все , что перенаправляется на это добавляемый.

Решение: используйте tee -a . От man tee:

-a , --append
добавлять к указанным файлам, не перезаписывать

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .