2010-06-29 34 views
21

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?

+0

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) –

Trả lời

41

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, $_;" 
+1

dấu phẩy không cần thiết sau STDERR trong ví dụ perl – Znik

+0

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) '? –

+0

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

0

Để 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 
+0

sai. bạn có một cơ hội để có được dòng chảy lớn và điền đầy đủ/thiết bị tmp, thường được kết nối với/hệ thống tập tin gốc. – Znik

+0

@Znik - '/ tmp/stdout' chỉ là một ví dụ. Vui lòng thay thế tên tệp đó bằng bất kỳ thứ gì phù hợp hơn trong ngữ cảnh của bạn. – mouviciel

9

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).

+0

Đâ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

-1
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

+0

xin lỗi, giải thích thêm ;-) – defdefred

Các vấn đề liên quan