Đầu ra trực tiếp đến đường ống và thiết bị xuất chuẩn


14

Tôi đã tự hỏi nếu có một cách để dẫn đầu ra của một lệnh và hướng nó đến thiết bị xuất chuẩn. Vì vậy, ví dụ, fortunein một cookie may mắn và cũng sao chép nó vào bảng tạm:

$ fortune | tee >(?stdout?) | pbcopy 
"...Unix, MS-DOS, and Windows NT (also known as the Good, the Bad, and
the Ugly)."
(By Matt Welsh)

Tôi không có OSX trong tay, còn tôi fortune | tee $(tty) | pbcopythì sao?
Archemar 30/03/2016

Câu trả lời:


9

Giả định của bạn:

fortune | tee >(?stdout?) | pbcopy

sẽ không hoạt động vì fortuneđầu ra sẽ được ghi thành tiêu chuẩn hai lần, vì vậy bạn sẽ tăng gấp đôi đầu ra pbcopy.

Trong OSX (và các hệ thống hỗ trợ khác /dev/std{out,err,in}), bạn có thể kiểm tra nó:

$ echo 1 | tee /dev/stdout | sed 's/1/2/'
2
2

đầu ra 2hai lần thay vì 12.

Bạn phải sử dụng các mô tả tệp khác, ví dụ lỗi tiêu chuẩn thông qua /dev/stderr:

$ echo 1 | tee /dev/stderr | sed 's/1/2/'
1
2

hoặc sử dụng ttyđể có được thiết bị đầu cuối giả được kết nối:

$ echo 1 | tee "$(tty)" | sed 's/1/2/'
1
2

Với zshmultiostùy chọn được đặt, bạn hoàn toàn không cần tee:

$ echo 1 >/dev/stderr | sed 's/1/2/'
1
2

tee $(tty)Hoặc, bạn biết,tee /dev/tty
Kenster

giải thích tuyệt vời, câu trả lời SO hàng đầu xung quanh.
Merlin

10

teeluôn luôn ghi vào đầu ra tiêu chuẩn của nó. Nếu bạn muốn gửi dữ liệu đến một lệnh ngoài thiết bị đầu cuối nơi đầu ra tiêu chuẩn đang diễn ra, chỉ cần sử dụng thay thế quy trình bằng lệnh đó. (Lưu ý rằng mặc dù bắt đầu bằng >, thay thế quá trình không chuyển hướng đầu ra tiêu chuẩn, teelệnh sẽ xem nó như một tham số.)

fortune | tee >(pbcopy)

Điều này là tốt, cũng là một giải pháp tốt.
Merlin

0

cuonglm đã nói lên tất cả

Thử xem:

fortune | tee "$(tty)" | pbcopy

ttynên giải quyết đến thiết bị đầu cuối giả thực tế (như /dev/pts/99) trong phiên tương tác (nghĩa là trong thiết bị đầu cuối) hoặc không có một tty nào trong lô, tại và daemon.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.