Прямые ошибки при поиске в /dev/null по умолчанию

В моей командной строке OSX, find направляет ошибки на STDOUT, Я нахожу это очень неудобным, и я также нахожу это раздражающим, чтобы добавить 2>/dev/null до конца команды каждый раз. Это поднимает несколько вопросов:

  • Является ли это общесистемной настройкой (например, делать ошибки напрямую STDOUT на OSX, но для /dev/null в Linux) или это специфично для find?
  • Есть ли способ заставить find принять это поведение по умолчанию (без создания псевдонима)?
  • Если да, потребуется ли вторая команда для восстановления исходного поведения?
  • Если нет, есть ли ярлык, который короче 2>/dev/null (например. unzip -qq вместо unzip >/dev/null)?
  • Как бы вы сделали это изменение на Linux box?

1 ответ

Решение

Хотя оба они появляются на вашем терминале одинаково, STDERR не перенаправляется на STDOUT.

Чтобы проверить, вру ли я, попробуйте запустить что угодно find команда генерировала ошибки (без перенаправлений) и помещала > example.file в конце этого. Если сгенерированные ошибки появляются на вашем экране, но не в сгенерированном файле с именем example.file, тогда вы знаете, что STDERR не перенаправляется, потому что, если бы все было, выходные данные были бы в сгенерированном файле.

Когда вы добавляете 2>/dev/null то, что вы говорите, это "взять все выходные данные из STDERR и записать их в файл /dev/null".

Является ли это общесистемной настройкой (например, делают ли ошибки прямые для STDOUT в OSX, но для / dev / null в Linux) или это специально для поиска?

Нет; по умолчанию при запуске программ из терминала STDIN, STDOUT и STDERR все копируются в терминал, но внутренне обрабатываются по-разному (т. е. имеют псевдоним для разных файловых дескрипторов), как в Linux. По умолчанию ошибки всегда выводятся на консоль при запуске программы, поэтому, если что-то идет не так, вы знаете, что, когда и почему. /dev/null как черная дыра; как только информация поступает, вы не можете получить ее обратно. Большинство людей не хотят, чтобы вывод ошибок таинственным образом исчезал в эфире, поэтому (не знаю дистрибутив Linux) делает это по умолчанию.

Есть ли способ заставить find принять это поведение по умолчанию (без создания псевдонима)?

Если вы хотите, чтобы find каждый раз так себя вел без использования псевдонима (что... Я имею в виду, псевдоним не будет работать в любом случае, потому что псевдонимы работают только тогда, когда вы хотите заменить только начало команды, а перенаправления должны быть в конце Belay, что, я был неправ; перенаправления могут быть помещены между / перед аргументами без проблем), одним из способов было бы определить функцию в bash (я предполагаю, что вы используете bash; мои извинения, если это ошибка) следующим образом:

find() { command find "$@" 2>/dev/null }

Если нет, есть ли ярлык, который короче 2>/dev/null (например, unzip -qq вместо unzip >/dev/null)?

Нет никакого файла конфигурации, переменной среды или удобного флага опции, который вы можете использовать, если вы это имеете в виду.

Как бы вы сделали это изменение на Linux box?

То же, что и на OSX. Если вы не хотите переопределять эту функцию при каждом входе в систему, добавьте эту строку в файл ~/.bashrc, Хотя... Если подумать, я думаю, что в OSX все по-другому. В OSX я почти уверен, что вам действительно нужно добавить его в ~/.bash_profile вместо этого, чтобы заставить его работать.

Другие вопросы по тегам