К каждому процессу в системе Unix подключено два потока вывода: стандартный вывод (stdout, файловый дескриптор 1) и стандартная ошибка ( stderr, файловый дескриптор 2). Они могут быть перенаправлены независимо друг от друга. Стандартный ввод использует дескриптор файла 0.
файл
, используйте > file
или более явное 1> файл
. Замените файл
на / dev / null
, чтобы удалить данные. файл
, используйте 2> файл
. 2> & 1
. 1> & 2
. Не существует понятия «конечный результат» потока или процесса.Я полагаю, что все, что отправляется на стандартный вывод, может быть воспринято как «результат» процесса, если только он не выводит данные в какой-то файл, который открывается сам по себе, или имеет другие побочные эффекты (например, отсоединение файла от каталога в случае of rm
, или обработка ряда сетевых подключений, в случае sshd
). Процесс также возвращает статус выхода (ноль для «успеха» и ненулевое значение для «неудачи»), который можно рассматривать как «результат» этого процесса, но это не обязательно связано с потоками вывода процесса.
Потоки также могут быть перенаправлены в режиме добавления , что означает, что если перенаправление выполняется в файл, этот файл изначально не будет усечен, а любые данные в потоке будут добавлены в конец. файла. Для этого можно использовать >> файл
вместо > файл
.
В примечании к вопросу дается команда
find / -type f -name php.ini 2>/dev/null
. Это перенаправляет (отбрасывает) только стандартную ошибку . Стандартный выходной поток вообще не перенаправляется и поэтому будет полностью виден в консоли или терминале. Если бы это была промежуточная часть конвейера, стандартный выходной поток подавался бы на стандартный ввод следующей команды конвейера.
В заключение я бы сказал, что существует два (а не четыре) выходных потока. Они могут быть перенаправлены независимо друг от друга различными способами, включая удаление их содержимого.