Прямые ошибки при поиске в /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
вместо этого, чтобы заставить его работать.