`tee` cho các lệnh


15

teecó thể chuyển hướng đầu vào tiêu chuẩn đường ống vào đầu ra tập tin tiêu chuẩn .

echo Hello, World! | tee greeting.txt

Lệnh trên sẽ hiển thị lời chào trên màn hình thiết bị đầu cuối và lưu nó trong nội dung của greeting.txttệp, tạo tệp nếu không có tên đó.

Cũng có -achuyển đổi teeđể chắp thêm vào tệp hiện có thay vì ghi đè.


Có cách nào thuận tiện để chuyển hướng đầu vào đường ống sang lệnh và đầu ra tiêu chuẩn thay vì tập tin không?

Tôi đang cố gắng tạo một tập lệnh bao bọc bukuđể sao chép vào lựa chọn chính URL của dấu trang được chỉ định bởi số chỉ mục của nó.

# bukuc:
#!/bin/sh
url=$(buku -f 1 -p $1 | cut -f 2) # NUMBER : URL
echo $url # DISPLAY
echo $url | xsel # PRIMARY SELECTION

Ở đây tôi sử dụng echo hai lần, lần đầu tiên để hiển thị trên thiết bị đầu cuối, và sau đó lưu trong lựa chọn chính (clipboard).

Tôi tưởng tượng một cái gì đó echo $url | teeC xselhoặc một phím tắt để hiển thị đầu ra trước khi chuyển sang lệnh tiếp theo (lệnh chuỗi), điều gì sẽ cho phép tôi xâu chuỗi toàn bộ lệnh trong một dòng mà không cần lưu kết quả vào một biến như sau:

buku -f 1 -p $1 | cut -f 2 | teeC xsel    

Tôi cũng có thể sử dụng nó urlviewđể xem, chọn và mở $BROWSERnhư sau:

bukuc 10-20 | urlview

3
Hãy thử tee /dev/ttyhoặc tty0(không nhớ chính xác ... tôi đang trên đường)
George Vasiliou

2
info teeđề cập đến quá trình thay thế và đầu ra của tee cho chương trình ...
Xen2050

Câu trả lời:


19

Nó đơn giản trong các shell hỗ trợ quá trình thay thế , ví dụ bash

$ echo foo | tee >(xsel)
foo
$ xsel -o
foo

Nếu không, bạn có thể sử dụng một FIFO (mặc dù nó thiếu sự tiện lợi)

$ mkfifo _myfifo
$ xsel < _myfifo &
$ echo bar | tee _myfifo
bar
$ xsel -o
bar
[1] + Done                       xsel 0<_myfifo
$ 

Cảm ơn! Hai điều tôi lưu ý: 1. sh(Vỏ Bourne) không hỗ trợ tính năng đó; 2. Mũi tên phải dính như một phần của toán tử đơn >()để thay thế quá trình.

11

Tương tự trực tiếp của "tee cho các lệnh" là peelệnh từ moreutils ( teenhưng với các đường ống). Các đối số của nó được sử dụng như các lệnh để chạy, không phải là các đường dẫn và chúng nhận được đầu vào được truyền cho chúng chứ không phải được ghi vào tệp. Tất cả các lệnh được đưa ra đầu vào tiêu chuẩn mà bạn đã chuyển thành đầu vào peecủa chúng.

Sử dụng pee, bạn có thể nhận được kết quả bạn muốn bằng cách yêu cầu nó chạy cả xselcatvới đầu vào.

echo foo | pee xsel cat

Có một catquá trình bổ sung nổi xung quanh đó để thực hiện đầu ra, đây không thực sự là vấn đề đối với trường hợp sử dụng của bạn nhưng có thể ít lý tưởng hơn vào những thời điểm khác. Điều này hoạt động với bất kỳ shell nào, không giống như thay thế quá trình, nhưng tất nhiên nó yêu cầu một công cụ bổ sung (có thể ít phổ biến hơn) được cài đặt.

Bạn có thể đưa ra các lệnh phức tạp hơn bằng cách trích dẫn chúng : pee "xsel --display :1" cat. Chúng chạy cùng sh, vì vậy bạn phải cẩn thận về các siêu ký tự shell.


4
Rất tuyệt - không biết về điều đó
Steeldo

2
Đó ... không phải là một cái tên hay.
David Richerby
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.