Передача по каналу STDERR по сравнению с STDOUT

Дисплей является первым аргументом Xorg. Вы можете ps затем grep Xorg .

[braga@coleman teste_geom]$ ps aux | grep Xorg
root      1584  5.3  1.0 156628 41708 tty1     Rs+  Jul22  22:56 /usr/bin/Xorg :0 -background none -verbose -auth /var/run/gdm/auth-for-gdm-a3kSKB/database -nolisten tcp vt1
braga     9110  0.0  0.0 109104   804 pts/1    S+   00:26   0:00 grep --color=auto Xorg

Вы можете затем awk это в то, везде, где формат Вы должны.

24
11.11.2011, 01:51
3 ответа

Я не знаю, какой текст Ваше книжное использование, но руководство удара является четким (если Вы уже немного знакомы с перенаправлениями):

Если |& используется, стандартная погрешность command1, в дополнение к ее стандартному выводу, подключена к стандартному входу command2 через канал; это - сокращение от 2>&1 |. Это неявное перенаправление стандартной погрешности к стандартному выводу выполняется после любых перенаправлений, указанных командой.

Таким образом, если Вы не хотите смешивать стандартный вывод и стандартную погрешность, необходимо будет перенаправить стандартный вывод где-то в другом месте. Видеть Как к grep потоку стандартной погрешности (stderr)?

{ ./script.sh 2>&1 >&3 | sed 's:^:\t:'; } 3>&1

И fd 1 и 3 из script.sh и sed укажет исходному stdout месту назначения как бы то ни было. Если Вы хотите быть добропорядочным гражданином, можно закрыть их fd 3, в котором не нуждаются те команды:

{ ./script.sh 2>&1 >&3 3>&- | sed 's:^:\t:' 3>&-; } 3>&1

bash и ksh93 может уплотнить >&3 3>&- кому: >&3- (fd перемещение).

26
27.01.2020, 19:41

|& в ударе просто (не ужасно портативен) ярлык для 2>&1 |, таким образом, необходимо видеть каждую расположенную с отступом строку.

1
27.01.2020, 19:41

|& каналы stderr к stdin, как 2>&1 |, таким образом, следующая программа получит обоих на stdin.

$cat test.sh
#!/bin/bash
echo "Normal Text."
echo "Error Text." >&2
$./test.sh | sed 's:^:\t:'
Error Text.
        Normal Text.
$ ./test.sh |& sed 's:^:\t:'
        Normal Text.
        Error Text.
6
27.01.2020, 19:41
  • 1
    О, таким образом, это в основном эквивалентно более длительному выражению runcommand 2>&1 | tee? т.е. runcommand |& tee? –  Naftuli Kay 11.11.2011, 01:52
  • 2
    да, они - то же. –  Kevin 11.11.2011, 05:36

Теги

Похожие вопросы