Какая разница между Foo |голова и фу |& голова? - PullRequest
1 голос
/ 15 февраля 2011

foo | head и foo | & head: какова роль & в последнем случае?Я знаю, что & используется для запуска процесса в фоновом режиме, но обе команды дали те же результаты, когда я тестировал его.

Ответы [ 3 ]

2 голосов
/ 15 февраля 2011

Перенаправляет стандартную ошибку, а также стандартный вывод foo на стандартный ввод head.В противном случае стандартная ошибка все равно будет отображаться на экране.

С пробелом между каналом и амперсандом foo | & head работает в csh и производных оболочках, но является синтаксической ошибкой в ​​shпроизводные снаряды.Без пробела foo |& head является сокращением в некоторых sh производных оболочках (zsh, bash, возможно, других) для foo 2>&1 | head, но не во многих других.

1 голос
/ 15 февраля 2011

Вы, вероятно, имеете в виду |& без пробела, так как | & с пробелом является синтаксической ошибкой (или, насколько я могу судить, & является noop в csh).

|& является синонимом 2>&1 |, что означает перенаправление файлового дескриптора 2 (стандартная ошибка) в файловый дескриптор 1 (стандартный вывод) перед передачей стандарта следующей команде в конвейере.Это позволяет включать в конвейер все, что печатается со стандартной ошибкой, вместо того, чтобы печатать ошибки на терминале, как обычно.Это поддерживается несколькими оболочками, такими как Bash.См. Руководство по Bash для получения дополнительной информации.

Обратите внимание, что этот синтаксис был введен только для Bash в Bash 4 (он был в некоторых других оболочках некоторое время) и не совместим с POSIX.так что не пытайтесь использовать его в сценариях переносимой оболочки.

0 голосов
/ 15 февраля 2011

IIRC да, вот и все, что он делает, это заставляет голову работать как фоновый процесс. Результат ДОЛЖЕН быть идентичным (в противном случае &) меняет семантику команды), это влияет только на планирование.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...