Есть ли способ сделать перенаправление CLI linux постоянным? - PullRequest
3 голосов
/ 12 мая 2010

У меня есть несколько команд по конвейеру, например:

find [options] | grep [options] | xargs grep [options]

Каждый из них может потенциально вызывать ошибки (ошибки прав доступа, ошибки пробелов в именах файлов и т. Д.), Которые меня не интересуют. Итак, я хочу перенаправить все ошибки в / dev / null. Я знаю, что могу сделать это с 2>/dev/null, для каждой команды . Можно ли установить перенаправление ввода-вывода постоянно? В идеале, я бы просто установил его один раз, в начале / конце команды, и тогда это повлияло бы на все последующие / предшествующие конвейерные команды. Кроме того, можно ли установить перенаправление ввода-вывода постоянно, чтобы оно продолжало влиять на все команды до тех пор, пока оно не будет сброшено?

Я использую bash (я проверил man-страницу на наличие встроенных команд bash и не увидел символов «>» и «<» в верхней части, поэтому я предположил, что это была вещь в Linux ... извините) </p>

Ответы [ 2 ]

7 голосов
/ 12 мая 2010

Я собираюсь предположить, что вы используете bash или, по крайней мере, какую-то оболочку, похожую на Bourne.

Я также предполагаю, что вы хотите избежать следующего:

find ... 2>/dev/null | grep ... 2>/dev/null | xargs ... 2>/dev/null

т.е. повторение части 2>/dev/null для каждого сегмента конвейера.

Вы можете сделать это с:

( find ... | grep ... | xargs ... ) 2>/dev/null

Вы также можете установить перенаправление на постоянной основе следующим образом:

exec 2>/dev/null

и (при условии, что STDOUT и STDERR оба указывали на одно и то же место ранее), вы можете отменить это с помощью:

exec 2>&1
0 голосов
/ 12 мая 2010

Запустить новую оболочку с перенаправленным stderr и запустить там свой конвейер?

Что-то вроде

$ bash 2>/dev/null -c "find [options] | grep [options] | xargs grep [options]"

Кажется, что работает (т.е. нет видимого вывода), когда я делаю

$ bash 2>/dev/null -c "echo nope 1>&2"

Конечно, побочный эффект заключается в том, что будет непросто понять, что произошло в случае чего-то неожиданного, но это ваше дело.

...