Zgodnie z „ Linux: The Complete Reference 6th Edition ” (str. 44), możesz przesyłać tylko STDERR za pomocą |&
symboli przekierowania.
Napisałem dość prosty skrypt, aby to przetestować:
#!/bin/bash
echo "Normal Text."
echo "Error Text." >&2
Uruchamiam ten skrypt w następujący sposób:
./script.sh |& sed 's:^:\t:'
Przypuszczalnie tylko wcięte zostaną linie wydrukowane do STDERR. Jednak tak naprawdę nie działa tak, jak widzę:
Normal Text.
Error Text.
Co robię tutaj źle?
./script.sh > /tmp/stdout_goes_here |& grep 'grepping_script_stderr'
nie działa zgodnie z przeznaczeniem, czyli: przekierowaniescript.sh
„sstdout
(który, zgodnie z instrukcją fragmencie powinno nastąpić wcześniej), następnie pozostawićgrep
do przetwarzania skryptustderr
. Zamiast tegostderr
oba tdout` kończą się wstdout_goes_here