ในบางโอกาสการทดแทนกระบวนการจะไม่ทำงานตามที่คาดไว้ นี่คือตัวอย่าง:
การป้อนข้อมูล:
gcc <(echo 'int main(){return 0;}')
เอาท์พุท:
/dev/fd/63: file not recognized: Illegal seek
collect2: error: ld returned 1 exit status
การป้อนข้อมูล:
แต่มันทำงานได้อย่างที่คาดไว้เมื่อใช้กับคำสั่งอื่น:
grep main <(echo 'int main(){return 0;}')
เอาท์พุท:
int main(){return 0;}
ฉันได้สังเกตเห็นความล้มเหลวที่คล้ายกันกับคำสั่งอื่น ๆ (เช่นคำสั่งคาดหวังว่าไฟล์จากการทดแทนกระบวนการไม่สามารถใช้/dev/fd/63
หรือคล้ายกัน) ความล้มเหลวด้วยgcc
นี้เป็นเพียงล่าสุด มีกฎทั่วไปบางอย่างที่ฉันควรทราบเพื่อกำหนดว่าเมื่อใดการทดแทนกระบวนการจะล้มเหลวด้วยวิธีนี้และไม่ควรใช้?
ฉันใช้ BASH รุ่นนี้บน Ubuntu 12.04 (ฉันเคยเห็นใน arch และ debian):
GNU bash, รุ่น 4.3.11 (1) - ปล่อย (i686-pc-linux-gnu)
gcc -xc <(echo 'int main(){return 0;}')
(ซึ่งกำหนดภาษาเป็นC
อย่างชัดเจน)
illegal seek
ดูเหมือนว่าคำตอบ -|pipe
ซึ่งbash
ชี้ให้เห็นว่าโปรแกรมที่เรียกใช้งานนั้นไม่ใช่ไฟล์ที่ค้นหาได้ อาจจะถ้าคุณไม่สามารถประสบความสำเร็จecho data | command /dev/fd/0
ในโปรแกรมแล้วคุณจะมีโชคที่คล้ายกัน w<(cmd)
/ มันไม่ได้ให้ไฟล์บนดิสก์ - มันแค่ทดแทนอาร์กิวเมนต์ที่ชี้ไปที่ไฟล์อธิบายท่อ