มีการอ้างอิงที่แตกต่างกันสองสามอย่างเกี่ยวกับ 'อินพุต' ที่นี่ดังนั้นฉันจะให้บางสถานการณ์ด้วยความเข้าใจในใจก่อน สำหรับคำตอบที่รวดเร็วของคำถามในรูปแบบที่สั้นที่สุด :
stat testfile < <($1)> outputfile
ข้างต้นจะดำเนินการสถิติใน testfile ใช้ (เปลี่ยนเส้นทาง) มันเป็น STDOUT และรวมไว้ในฟังก์ชั่นพิเศษถัดไป (ส่วน <()) จากนั้นส่งออกผลลัพธ์สุดท้ายของสิ่งที่เคยเป็นไฟล์ใหม่ (outputfile) ไฟล์ถูกเรียกใช้จากนั้นอ้างอิงด้วย bash ในตัว ($ 1 ทุกครั้งหลังจากนั้นจนกว่าคุณจะเริ่มชุดคำสั่งใหม่)
คำถามของคุณดีมากและมีหลายคำตอบและวิธีการทำเช่นนี้ แต่มันจะเปลี่ยนแปลงกับสิ่งที่คุณทำโดยเฉพาะ
ตัวอย่างเช่นคุณสามารถวนซ้ำได้เช่นกันซึ่งค่อนข้างมีประโยชน์ การใช้งานทั่วไปของสิ่งนี้คือในความคิดของรหัส psuedo คือ:
run program < <($output_from_program)> my_own.log
การรับสิ่งนั้นเข้ามาและขยายความรู้นั้นทำให้คุณสามารถสร้างสิ่งต่าง ๆ เช่น:
ls -A; (while read line; do printf "\e[1;31mFound a file\e[0m: $line\n"; done) < <(/bin/grep thatword * | /usr/bin/tee -a files_that_matched_thatword)
สิ่งนี้จะดำเนินการอย่างง่าย ls-a ในไดเรกทอรีปัจจุบันของคุณจากนั้นบอกขณะที่วนลูปผ่านแต่ละผลลัพธ์จาก ls -A ถึง (และนี่คือที่ ๆ มันยุ่งยาก!) grep "thatword" ในผลลัพธ์แต่ละรายการและดำเนินการก่อนหน้านี้เท่านั้น printf (สีแดง) หากพบไฟล์ที่มี "thatword" อยู่จริง นอกจากนี้ยังจะบันทึกผลลัพธ์ของ grep ลงในไฟล์ข้อความใหม่ files_that_matched_thatword
ตัวอย่างผลลัพธ์:
ls -A; (while read line; do printf "\e[1;31mFound a file\e[0m: $line\n"; done) < <(/bin/grep thatword * | /usr/bin/tee -a files_that_matched_thatword)
index.html
ทั้งหมดนั้นเพียงพิมพ์ ls -A ผลลัพธ์ไม่มีอะไรพิเศษ เพิ่มบางสิ่งเพื่อให้ grep ในครั้งนี้:
echo "thatword" >> newfile
ตอนนี้เรียกใช้อีกครั้ง:
ls -A; (while read line; do printf "\e[1;31mFound a file\e[0m: $line\n"; done) < <(/bin/grep thatword * | /usr/bin/tee -a files_that_matched_thatword)
files_that_matched_thatword index.html newfile
Found a file: newfile:thatword
ในขณะที่อาจเป็นคำตอบที่เหนื่อยล้ามากกว่าที่คุณกำลังมองหาในปัจจุบัน แต่ฉันเชื่อว่าการเก็บบันทึกย่อที่มีประโยชน์แบบนี้จะช่วยให้คุณได้รับประโยชน์มากขึ้นในความพยายามในอนาคต
<
(อินพุตจากไฟล์ไปทางด้านซ้าย) หรือ|
(อินพุตจากสตรีมไปทางด้านขวา) มีความแตกต่าง