คำถามติดแท็ก tee

tee เป็นยูทิลิตี้บรรทัดคำสั่งที่อ่านอินพุตมาตรฐานและเขียนไปยังเอาต์พุตมาตรฐานเช่นเดียวกับไฟล์ที่ระบุเป็นอาร์กิวเมนต์ ใช้แท็กนี้สำหรับคำถามเกี่ยวกับคำสั่ง tee


3
`: w! sudo tee %` ทำงานอย่างไร
หากคุณเปิดไฟล์ที่คุณไม่ได้รับอนุญาตให้เขียนเป็นกลุ่มแล้วตัดสินใจว่าคุณจำเป็นต้องเปลี่ยนไฟล์คุณสามารถเขียนการเปลี่ยนแปลงของคุณได้โดยไม่ต้องออกจาก vim โดยที่:w !sudo tee % ฉันไม่เข้าใจวิธีการทำงานนี้ คุณช่วยกรุณาตัดออกได้ไหม ฉันเข้าใจ:wส่วนมันเขียนบัฟเฟอร์ปัจจุบันไปยังดิสก์โดยสมมติว่ามีชื่อไฟล์ที่เชื่อมโยงอยู่ใช่ไหม ฉันยังเข้าใจ!ว่าsudo teeคำสั่งใดที่เรียกใช้งานและ%แสดงถึงเนื้อหาบัฟเฟอร์ปัจจุบันใช่ไหม แต่ก็ยังไม่เข้าใจว่ามันใช้งานได้อย่างไร
27 vim  sudo  tee 

4
เป็นไปได้ไหมที่จะเปลี่ยนทิศทางเอาต์พุตของคำสั่งไปเป็นคำสั่งมากกว่าหนึ่งคำสั่ง?
เท่าที่ฉันรู้ฉันสามารถใช้คำสั่ง tee เพื่อแยกเอาต์พุตมาตรฐานลงบนหน้าจอและไฟล์เพิ่มเติม: command -option1 -option2 argument | tee file1 file2 file3 เป็นไปได้หรือไม่ที่จะเปลี่ยนเส้นทางเอาต์พุตไปยังคำสั่งแทนที่จะเป็นไฟล์โดยใช้ tee ดังนั้นฉันสามารถสร้างเชนของคำสั่งได้ตามทฤษฎีหรือไม่
21 command-line  pipe  tee 

2
วิธียกเลิกคำสั่ง Linux โดยไม่ทำลายแอปพลิเคชันที่ได้รับ
ฉันมีสคริปต์ทุบตีที่ทำงานตราบใดที่เครื่อง Linux เปิดอยู่ ฉันเริ่มมันดังแสดงด้านล่าง: ( /mnt/apps/start.sh 2>&1 | tee /tmp/nginx/debug_log.log ) & หลังจาก lauches ฉันสามารถดูคำสั่ง tee ในเอาต์พุตpsของฉันได้ดังแสดงด้านล่าง $ ps | grep tee 418 root 0:02 tee /tmp/nginx/debug_log.log 3557 root 0:00 grep tee ฉันมีฟังก์ชั่นที่ตรวจสอบขนาดของบันทึกที่teeสร้างและฆ่าคำสั่งteeเมื่อบันทึกถึงขนาดที่แน่นอน: monitor_debug_log_size() { ## Monitor the file size of the debug log to make sure it does not …
19 linux  scripting  pipe  kill  tee 

4
ส่งออกไปยัง stdout และในเวลาเดียวกัน grep เป็นไฟล์
stdoutฉันมีสคริปต์ที่ข้อความขาออกไป ฉันต้องการที่จะเห็นผลลัพธ์ทั้งหมดนี้ใน terminal ของฉันและในเวลาเดียวกันฉันต้องการที่จะกรองบางบรรทัดและบันทึกไว้ในไฟล์ ตัวอย่าง: $ myscript Line A Line B Line C $ myscript | grep -P 'A|C' > out.file $ cat out.file Line A Line C ฉันต้องการเห็นเอาต์พุตของคำสั่งแรกในเทอร์มินัลและบันทึกผลลัพธ์ของคำสั่งที่สองในไฟล์ ในเวลาเดียวกัน. ฉันพยายามใช้teeแต่ไม่มีผลกับหรือดีกว่ามีผลตรงกันข้าม
18 grep  pipe  stdout  tee 

3
tee + cat: ใช้เอาต์พุตหลายครั้งแล้วต่อผลลัพธ์ที่ต่อกัน
ถ้าผมเรียกคำสั่งบางอย่างเช่นechoฉันสามารถใช้ผลจากคำสั่งว่าในคำสั่งอื่น ๆ teeที่มีหลาย ตัวอย่าง: echo "Hello world!" | tee >(command1) >(command2) >(command3) ด้วย cat ฉันสามารถรวบรวมผลลัพธ์ของคำสั่งต่าง ๆ ได้ ตัวอย่าง: cat <(command1) <(command2) <(command3) ฉันต้องการที่จะสามารถทำทั้งสองสิ่งในเวลาเดียวกันเพื่อที่จะสามารถteeเรียกคำสั่งเหล่านั้นในผลลัพธ์ของสิ่งอื่น (ตัวอย่างเช่นที่echoฉันเขียน) แล้วรวบรวมผลลัพธ์ทั้งหมดของพวกเขาในผลลัพธ์เดียวด้วยcat. มันเป็นสิ่งสำคัญที่จะให้ผลในการสั่งซื้อที่นี้หมายถึงเส้นในการส่งออกของcommand1, command2และcommand3ไม่ควรพัน แต่ได้รับคำสั่งเป็นคำสั่งที่มี (ที่มันเกิดขึ้นกับcat) อาจจะมีตัวเลือกที่ดีกว่าcatและteeแต่ผู้ที่เป็นคนที่ฉันรู้เพื่อให้ห่างไกล ฉันต้องการหลีกเลี่ยงการใช้ไฟล์ชั่วคราวเนื่องจากขนาดของอินพุตและเอาต์พุตอาจมีขนาดใหญ่ ฉันจะทำสิ่งนี้ได้อย่างไร PD: ปัญหาอื่นคือสิ่งนี้เกิดขึ้นในลูปซึ่งทำให้การจัดการไฟล์ชั่วคราวหนักขึ้น นี่คือรหัสปัจจุบันที่ฉันมีและใช้งานได้กับ testcase เล็ก ๆ แต่มันสร้างลูปไม่สิ้นสุดเมื่ออ่านและเขียนจาก auxfile ด้วยวิธีที่ฉันไม่เข้าใจ somefunction() { if [ $1 -eq 1 ] then …
18 pipe  cat  tee  concurrency 

3
tee stdout ถึง stderr?
ฉันต้องการส่ง stdout จากกระบวนการหนึ่งไปยัง stdin ของกระบวนการอื่น แต่ก็รวมถึงคอนโซลด้วย ยกตัวอย่างเช่นส่ง stdout ไปที่ stdout + stderr ตัวอย่างเช่นฉันได้git editนามแฝงต่อไปนี้: git status --short | cut -b4- | xargs gvim --remote xargsฉันต้องการรายการชื่อไฟล์จะถูกส่งไปยังหน้าจอเช่นเดียวกับการ ดังนั้นมีteeยูทิลิตี้เหมือนที่จะทำเช่นนี้? เพื่อให้ฉันสามารถทำสิ่งที่ชอบ: git status --short | \ cut -b4- | almost-but-not-quite-entirely-unlike-tee | \ xargs gvim --remote

2
`ที 'สำหรับคำสั่ง
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 …

3
ส่งออกโดยตรงไปยังท่อและ stdout
ฉันสงสัยว่ามีวิธีที่จะส่งออกท่อของคำสั่งและตรงไปยัง stdout ตัวอย่างเช่นfortuneพิมพ์คุกกี้โชคลาภและคัดลอกไปยังคลิปบอร์ด: $ fortune | tee >(?stdout?) | pbcopy "...Unix, MS-DOS, and Windows NT (also known as the Good, the Bad, and the Ugly)." (By Matt Welsh)
14 bash  pipe  stdout  tee 

3
ฉันจะใช้ tee เพื่อเปลี่ยนเส้นทางไปยัง grep ได้อย่างไร
ฉันไม่ค่อยมีประสบการณ์ในการใช้เสื้อยืดดังนั้นฉันหวังว่านี่จะไม่ธรรมดา หลังจากที่ได้ดูหนึ่งในคำตอบที่จะคำถามนี้ฉันมาข้าม beheviour teeแปลก เพื่อให้ฉันออกบรรทัดแรกและบรรทัดที่พบฉันสามารถใช้สิ่งนี้: ps aux | tee >(head -n1) | grep syslog USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND syslog 806 0.0 0.0 34600 824 ? Sl Sep07 0:00 rsyslogd -c4 อย่างไรก็ตามครั้งแรกที่ฉันรันสิ่งนี้ (เป็น zsh) ผลลัพธ์อยู่ในลำดับที่ไม่ถูกต้องส่วนหัวคอลัมน์จะต่ำกว่าผลลัพธ์ grep (นี่ไม่ได้เกิดขึ้นอีกแล้ว) ดังนั้นฉันจึงพยายามสลับคำสั่งรอบ ๆ : ps aux | tee …

3
ฉันจะเปลี่ยนเส้นทางการจับคู่ไปยังไฟล์และไม่ตรงกับไฟล์อื่นได้อย่างไร
มีสคริปต์ / โปรแกรม / ยูทิลิตี้สำหรับความต้องการต่อไปนี้แล้วในวิธีที่ได้รับการปรับให้เหมาะสมหรือไม่? someCommand | tee >(grep "pattern" > LinesWhichMatch) | grep -v "pattern" > LinesWhichDoesNotMatch
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.