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