Прежде всего, отметим, что >log
это стенография для 1>log
. Синтаксис N>M
переводит на переназначения указателя. Назовем указатель стандартным выходом fd1
и указателем на стандартную ошибку fd2
.То есть:
fd1
является указателем на stdout
fd2
является указателем на stderr
При выполнении cmd 2>&1 >log
, он изменяет указатели так:
- сделать
fd2
укажите, на что fd1
указывает, что составляет stdout
- сделать
fd1
точку в файл
- => в результате,
fd2
указывает на stdout
и fd1
указывает на файл
При выполнении cmd >log 2>&1
, он изменяет указатели, как это:
- Марка
fd1
указывает на файл
- Марка
fd2
указывает на то, что fd1
указывает, который является файлом
- => В результате, как
fd1
и fd2
указывают на тот же файл
То есть, на основе упорядочения указателей переназначения, результат будет другим. В одном случае оба указателя будут указывать на одно и то же, или они будут указывать на разные вещи.
Вместо использования ls -yz
в качестве примера команды cmd
, я найти более подходящий пример, чтобы объяснить это ls yes nonexistent
, где yes
это файл, который существует, и nonexistent
это файл, который не делает. В этом примере будет напечатано что-то на stdout
и stderr
, и, играя с порядком N>M
, вы можете более четко видеть, где все закончилось. (С ls -yz
есть только stderr
, в то время как stdout
пуст.)
Я был бы очень благодарен за объяснение нисходящей линии, как будто мой ответ неверен, я кое-что узнаю здесь. – Fred
Я думаю, что OP знает, что порядок имеет значение, вопрос «почему» имеет значение. Обратите внимание, что два порядка показаны бок о бок на странице, связанной OP, так что это довольно ясно. – janos