Tôi muốn có stdout của lệnh được sao chép thành stderr cũng như dưới bash. Một cái gì đó như:Sao chép stdout thành stderr
$ echo "FooBar" (...)
FooBar
FooBar
$
trong đó (...) là biểu thức chuyển hướng. Điều đó có thể không?
Tôi muốn có stdout của lệnh được sao chép thành stderr cũng như dưới bash. Một cái gì đó như:Sao chép stdout thành stderr
$ echo "FooBar" (...)
FooBar
FooBar
$
trong đó (...) là biểu thức chuyển hướng. Điều đó có thể không?
Sử dụng tee với/dev/stderr:
echo "FooBar" | tee /dev/stderr
hoặc sử dụng awk/perl/python tự làm sao chép:
echo "FooBar" | awk '{print;print > "/dev/stderr"}'
echo "FooBar" | perl -pe "print STDERR, $_;"
dấu phẩy không cần thiết sau STDERR trong ví dụ perl – Znik
có thể di động hơn trên các hệ điều hành và trên toàn bộ Shell? 'tee/dev/stderr' hoặc' tee> (cat> & 2) '? –
Tôi đặt cược cái sau là tương thích đa nền tảng hơn khi xem '/ dev/stderr' không khả dụng trên mọi bản phân phối như thế nào. – Qix
Để chuyển hướng đến stderr, tôi sẽ sử dụng >&2
hoặc >/dev/stderr
. Để sao chép đầu ra, tôi sẽ sử dụng tee
. Hạn chế của nó là một tập tin tạm thời là cần thiết:
echo "FooBar" | tee /tmp/stdout >&2 ; cat /tmp/stdout
Sử dụng quá trình thay thế: http://tldp.org/LDP/abs/html/process-sub.html
echo "FooBar" | tee >(cat >&2)
Tee lấy tên tệp làm thông số và sao y đầu ra cho tệp này. Với quá trình thay thế, bạn có thể sử dụng một quy trình thay vì tên tệp >(cat)
và bạn có thể chuyển hướng đầu ra từ quá trình này đến stderr >(cat >&2)
.
Đây là giải pháp tốt cho các hệ điều hành như OS X, không có hệ thống tệp/proc. – Meow
echo "FooBar" |tee /dev/stderr
tee: /dev/stderr: Permission denied
không làm việc với RedHat 6,3
echo "FooBar" | (read A ; echo $A ; echo $A >&2)
đang làm việc
xin lỗi, giải thích thêm ;-) – defdefred
Xem [Làm thế nào tôi có thể gửi stdout để nhiều lệnh?] (Http://unix.stackexchange.com/questions/28503/how-can-i-send-stdout-to-multiple-commands) –