Linux / Debian - 'pee' trong moreutils làm gì?


21

Gần đây tôi đã phát hiện ra gói 'moreutils' trong Debian (và Ubuntu) . Đây là một bộ sưu tập các công cụ unix tiện lợi.

Một trong những lệnh là 'pee'. Trang người đàn ông nói:

pee giống như tee nhưng cho đường ống.

Tuy nhiên đó là một trang ngắn, tôi đã gửi một lỗi về nó . Có ai biết nó làm gì, làm thế nào để sử dụng nó, tại sao người ta sẽ sử dụng nó?

Câu trả lời:


29

Đây là những gì bạn có thể làm với pee:

seq 5 -1 1 > file
cat file |pee 'sort -u > sorted' 'sort -R > unsorted'

Vì vậy, pee làm việc với các ống vỏ thay vì các tập tin.

bash không cần pee, nó có thể mở các lệnh shell dưới dạng tệp:

cat file |tee >(sort -u > sorted) >(sort -R > unsorted)

1
Điều này sẽ làm việc với jockers tên tệp? Xem zgp.org/~dmarti/tips/git-multipl-post-receive-hooks - pee được sử dụng để nhân stdinvà đưa bản sao cho mọi tập lệnh toán học mẫu tên tệp, liệu bash có thể làm điều này không? AFAIU nó sẽ mở rộng dấu bên trong dấu ngoặc causnig cái gì đó như tee >(app1 app2 app3 app4)đó không phải là >(app1) >(app2) >(app3) >(app4)rằng chương trình câu trả lời của bạn
Arioch 'The

@Arioch, cú pháp bash sẽ không hoạt động với kỹ thuật hook-joker. Chỉ cần cài đặt thêmututils.
Tobu

1
Sử dụng tee >/dev/nullđể tránh sao chép stdin thành thiết bị xuất chuẩn
jfs

1
lợi thế thực sự để đi qua tee là nó sẽ gửi thiết bị xuất chuẩn từ mỗi quy trình phụ đến thiết bị xuất chuẩn của chính nó. với tee, bạn cần chuyển hướng từng quá trình xuất ra tệp nếu bạn muốn lưu nó, nhưng với pee, bạn chỉ cần lưu thiết bị xuất chuẩn. tất nhiên điều đó chỉ có ý nghĩa nếu mỗi lệnh phụ xuất ra một thứ được định dạng tương tự. giống như nếu bạn không thể tìm ra cách hoặc biểu thức chính quy trong grep bạn có thể làm cat file | pee 'grep this' 'grep that' > lines.with.this.or.that.txt... bằng cách sử dụng tee, bạn sẽ chỉ nhận được một bản sao filetrên thiết bị xuất chuẩn.
underrun

Các >(command)tính năng được gọi là thay Process .
Vlastimil Ovčáčík

16

Có lẽ dễ hiểu hơn nếu bạn sử dụng teetrước. Công cụ cũ hữu ích này nhận đầu vào tiêu chuẩn và ghi ra nhiều tệp, cộng với đầu ra tiêu chuẩn. Sau đây là

echo "Hello world" | tee one two

Sẽ tạo hai tệp, được đặt tên onetwo, cả hai đều chứa chuỗi Hello world. Nó cũng sẽ in ra thiết bị đầu cuối của bạn.


Bây giờ peethực hiện một chức năng tương tự nhưng thay vì chuyển hướng đầu ra sang nhiều tệp, nó chuyển hướng đến nhiều lệnh phụ, ống ala. Nó khác một chút so teevới khía cạnh rằng nó không gửi stdin gốc đến thiết bị xuất chuẩn vì sẽ không có ý nghĩa khi kết hợp nó với đầu ra của các lệnh phụ. Ví dụ rất đơn giản sau đây:

echo "Hello world" | pee cat cat

Sẽ xuất chuỗi Hello worldđến thiết bị đầu cuối của bạn hai lần. Điều này là do mỗi một trong hai trường hợp catnhận được đầu ra tiêu chuẩn và thực hiện những gì catđang làm, đó là in.

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.