ตามทฤษฎีแล้วถ้าฉันรู้ pid ของ bash shell ที่กำลังรันอยู่ฉันสามารถรัน cat ที่ stdout ถูกเปลี่ยนทิศทางไปยัง stdin ของเชลล์นั้น ดูเหมือนว่าฉันจะพิมพ์บางอย่างบนเปลือกนั้น น่าเสียดายที่มีกระแสข้อมูลมาจาก cat แต่จะไม่ทำให้เชลล์ทำงานอย่างถูกต้อง (คำสั่งที่ป้อนจาก cat จะไม่ถูกดำเนินการโดย bash)
เปิดเทอร์มินัล:
ps -ef | grep bash
ymf 4906 4887 0 16:19 pts/0 00:00:00 /bin/bash
บนเทอร์มินัลอื่น:
cat 1> /proc/4906/fd/0
echo 'hello!'
ทำไม?
top
และคุณจะเห็นว่า stdin เป็นเพียงการเพิ่มที่ใดที่หนึ่งไปยังเอาต์พุต ฉันเดาว่าเนื่องจากเชลล์เริ่มต้นเป็นเชลล์แบบโต้ตอบมันจะไม่ยอมรับคำสั่งจาก stdin แต่นั่นเป็นการเก็งกำไรที่บริสุทธิ์
ls -l /proc/PID/fd/
. 0, 1, 2 ถูกเปลี่ยนเส้นทางทั้งหมดไปที่ /dev/pts/TERM_NUMER
ไม่ว่าจะยอมรับคำสั่งจาก stdin หรือไม่ฉันแน่ใจว่า fd0 นั้นใช้สำหรับอินพุตและฉันได้เปลี่ยนเส้นทางการส่งออกของ cat ไปแล้ว