`ที 'สำหรับคำสั่ง


15

teeสามารถเปลี่ยนเส้นทางอินพุตมาตรฐาน piped ในการส่งออกมาตรฐานและไฟล์

echo Hello, World! | tee greeting.txt

คำสั่งด้านบนจะแสดงคำทักทายบนหน้าจอเทอร์มินัลและบันทึกไว้ในเนื้อหาของgreeting.txtไฟล์สร้างไฟล์หากไม่มีชื่อนั้น

นอกจากนี้ยังมีการ-aสลับteeเพื่อผนวกไฟล์ที่มีอยู่แทนการเขียนทับ


มีวิธีที่สะดวกในการเปลี่ยนเส้นทางอินพุต piped ไปยังคำสั่งและเอาต์พุตมาตรฐานแทนที่จะเป็นไฟล์หรือไม่?

ฉันกำลังพยายามสร้างสคริปต์ตัวตัดbukuเพื่อคัดลอกไปยังตัวเลือกหลัก URL ของบุ๊กมาร์กที่ระบุโดยหมายเลขดัชนี

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

ที่นี่ฉันใช้echo สองครั้งแรกสำหรับการแสดงบน terminal แล้วบันทึกในการเลือกหลัก (คลิปบอร์ด)

ฉันจินตนาการถึงบางสิ่งecho $url | teeC xselหรือช็อตคัตเพื่อแสดงเอาต์พุตก่อนที่จะส่งไปยังคำสั่งถัดไป (คำสั่ง chaining) สิ่งที่จะทำให้ฉันเชื่อมโยงคำสั่งทั้งหมดในหนึ่งบรรทัดโดยไม่จำเป็นต้องบันทึกผลลัพธ์ในตัวแปรดังนี้

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

ฉันยังสามารถใช้มันurlviewเพื่อดูเลือกและเปิดด้วย$BROWSERดังต่อไปนี้:

bukuc 10-20 | urlview

3
ลองtee /dev/ttyหรือtty0(จำไม่ได้ว่า ... ฉันอยู่บนถนน)
George Vasiliou

2
info teeกล่าวถึงการเปลี่ยนตัวกระบวนการและการส่งออกท่อทีเพื่อโปรแกรม ...
Xen2050

คำตอบ:


19

มันตรงไปตรงมาในกระสุนที่สนับสนุนการทดแทนกระบวนการเช่นทุบตี

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

มิฉะนั้นคุณสามารถใช้ FIFO (แม้ว่าจะไม่สะดวก)

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

ขอบคุณ! สองสิ่งที่ฉันสังเกตเห็น: 1. sh(บอร์นเชลล์) ไม่รองรับคุณสมบัตินั้น; 2. ลูกศรต้องยึดเป็นส่วนหนึ่งของโอเปอเรเตอร์เดียว>()เพื่อทดแทนกระบวนการ

11

อะนาล็อกโดยตรงของ "ทีออฟสำหรับคำสั่ง" คือpeeคำสั่งจาก moreutils ( teeแต่มีท่อ) อาร์กิวเมนต์ใช้เป็นคำสั่งเพื่อเรียกใช้ไม่ใช่เป็นพา ธ และจะได้รับอินพุตที่ป้อนไปยังแทนที่จะเขียนเป็นไฟล์ คำสั่งทั้งหมดจะได้รับอินพุตมาตรฐานที่คุณไพพ์peeเป็นของตนเอง

ใช้peeคุณสามารถได้รับผลลัพธ์ที่คุณต้องการด้วยการบอกให้เรียกใช้ทั้งสองxselและcatด้วยการป้อนข้อมูล

echo foo | pee xsel cat

มีcatกระบวนการพิเศษที่ลอยอยู่รอบ ๆ เพื่อทำเอาต์พุตซึ่งไม่ได้เป็นปัญหาสำหรับกรณีการใช้งานของคุณ แต่อาจเหมาะกว่าเวลาอื่น สิ่งนี้ใช้ได้กับเชลล์ใด ๆ ซึ่งแตกต่างจากการทดแทนกระบวนการ แต่แน่นอนว่ามันต้องใช้เครื่องมือพิเศษ (อาจมีน้อยกว่าปกติ) ติดตั้ง

pee "xsel --display :1" catคุณสามารถให้คำสั่งที่ซับซ้อนมากขึ้นโดยการอ้างพวกเขา มันทำงานด้วยshดังนั้นคุณต้องระวังเกี่ยวกับเชลล์เมตาอักขระ


4
เจ๋งมาก - ไม่รู้เรื่องเลย
steeldriver

2
นั่นคือ ... ไม่ใช่ชื่อที่ดี
David Richerby
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.