Почему не работает перенаправление вывода из nginx?
Я хочу перечислить все модули сервера nginx построчно, поэтому набираю следующее:
nginx -V | tr -- - '\n'
Но это не помещает модули в линии. Если я сделаю это так:
2>&1 nginx -V | tr -- - '\n'
оно работает. Но почему?
1 ответ
То, что вы наблюдаете, указывает на то, что nginx -V
записывает свой вывод в стандартный поток ошибок (он же stderr
- по файловому дескриптору 2
) а не стандартный поток вывода (ака stdout
- дескриптор файла 1
). Только stdout
проходит через трубу |
Так что ваши tr
команда не получает его.
2>&1
синтаксис говорит оболочке перенаправить stderr
в stdout
чтобы потом tr
, К вашему сведению, размещение, которое вы использовали, является синтаксически законным, но нетрадиционным - чаще всего такой вид перенаправления будет записан как
nginx -V 2>&1 | tr -- - '\n'
Кстати, труба |
действительно перенаправляет вывод первой команды, а не ввод второй, которая поступает из стандартного потока ввода (stdin
- дескриптор файла 0
) по-прежнему.