Почему `2>&1` не работает в этом конвейере?

Почему `2>&1` не работает в этом конвейере?

Я не могу найти способ перенаправить ошибку на моем NAS.

Оболочка есть, /bin/shи когда я использую ее, > mylogfile.log 2>&1я все еще вижу ошибку, печатающуюся на терминале. Конкретная команда —

find /volume1/ | grep "totoro" > ~/totoro.log 2>&1

и я вижу ошибку от find. Есть ли способ заставить работать перенаправление? Как записать findошибки в файл журнала?

решение1

find /volume1/ | grep "totoro" > ~/totoro.log 2>&1

Только ваш 2>&1влияет grep, а не find. В приведенной ниже команде первый 2>&1влияет find:

find /volume1/ 2>&1 | grep "totoro" > ~/totoro.log 2>&1   # probably wrong

Но это отправит stderr вместе со stdout из findв grep. Вероятно, вы не хотите grepфильтровать stderr из find. Я полагаю, вы хотите захватить stdout и stderr всей составленной команды. Если так, запустите команду в явной подоболочке и перенаправьте ее выходные потоки и потоки ошибок:

(find /volume1/ 2>&1 | grep "totoro") > ~/totoro.log 2>&1

решение2

Пожалуйста, посмотрите команду "tee". Она читает из стандартного ввода и записывает в стандартный вывод и файлы. Это может быть полезно здесь.

Связанный контент