ดำเนินการคำสั่ง Nohup พร้อมอินพุต


11

ใน UNIX ฉันมีกระบวนการที่ฉันต้องการรันโดยใช้ nohup อย่างไรก็ตามกระบวนการนี้ในบางจุดจะรอที่พรอมต์ที่ฉันต้องป้อนyesหรือnoเพื่อดำเนินการต่อ จนถึงตอนนี้ใน UNIX ฉันได้ทำสิ่งต่อไปนี้:

nohup myprocess <<EOF
y
EOF

ดังนั้นฉันเริ่มกระบวนการ 'myprocess' โดยใช้ nohup และไปป์ในไฟล์ด้วย 'y' จากนั้นปิดไฟล์ บรรทัดข้างต้นเป็นคำสั่งที่แยกกันสามคำสั่งอย่างมีประสิทธิภาพ - เช่นฉันกด Enter บนบรรทัดแรกใน UNIX จากนั้นฉันจะได้รับพรอมต์เมื่อฉันป้อน 'y' จากนั้นกด Enter เพื่อพิมพ์ 'EOF' ในที่สุดและกดปุ่ม return อีกครั้ง ดังนั้นสิ่งนี้ทำงานได้อย่างสมบูรณ์แบบ แต่ปัญหาของฉันอยู่ด้านล่าง

ฉันต้องการที่จะดำเนินการนี้ใน Perl แต่ฉันไม่แน่ใจว่าฉันสามารถรันคำสั่งนี้เพราะมันมีสามบรรทัด ฉันไม่รู้ว่าสิ่งต่อไปนี้จะได้ผลหรือไม่:

my $startprocess = `nohup myprocess <<EOF &
y
EOF
`

สิ่งนี้ควรจะเป็นไปตามที่เขียนไว้ในคำถาม (หลังจากการแก้ไขครั้งแรกทำให้มันไร้สาระนิดหน่อย)

@hop ฉันไม่รู้จริงๆว่าคุณกำลังพูดถึงเรื่องใดการแก้ไขครั้งแรกเพิ่มบรรทัดใหม่และจัดรูปแบบส่วนของเชลล์เป็นรหัสเพื่อให้แสดงได้อย่างถูกต้อง ฉันไม่ได้เปลี่ยนอะไรเลยการแก้ไขดั้งเดิมอยู่ที่นี่
Michael Mrozek

@Michael: ถูกต้องและฉันขอโทษ ฉันตีความความแตกต่างและความคิดผิดคุณได้เพิ่มแบคคิกหลัง ทำให้คำถามไร้สาระยิ่งขึ้นตัวอย่างที่ให้ควรทำงานได้

@hop The perl one? ฉันคิดว่ามันไม่ทำงานโดยไม่ลองเพราะฉันไม่รู้ว่า perl แต่ฉันคิดว่าเขาพูดว่า "ฉันไม่รู้ว่าสิ่งต่อไปนี้จะได้ผลหรือไม่" ดังนั้นบางทีมันก็ใช้ได้ คุณน่าจะตอบว่าตัวอย่างที่ให้มาใช้ได้
Michael Mrozek

คำตอบ:


19

หากคุณต้องการเขียนเพียงหนึ่งystdin ของกระบวนการคุณสามารถทำได้:

(echo y | nohup myprocess) &

หากคุณต้องการที่จะเขียนyต่อไปทุกครั้งที่ปรากฏขึ้น coreutil yesมีอยู่เพื่อจุดประสงค์นี้ - มันจะทำการเขียนสิ่งที่คุณบอกให้ stdout ค่าเริ่มต้นคือการส่งออก "y" ดังนั้นคุณสามารถ:

(yes | nohup myprocess) &

แต่ถ้าคุณต้องการสิ่งอื่นคุณสามารถผ่านมันเป็นอาร์กิวเมนต์


+1: ฉันไม่ได้เห็นyesใช้ในมหายุค
msw

Michael ขอบคุณสำหรับการตอบกลับที่รวดเร็ว อย่างไรก็ตามฉันคิดว่าฉันได้ลองทำตามคำแนะนำของคุณแล้วโดยที่ฉันได้ทำขั้นตอนดังกล่าวแล้ว เมื่อฉันทำสิ่งนี้ผลลัพธ์จะรั่วไหลไปยังเทอร์มินัลของฉันเสมอแม้ว่าฉันจะยืนยัน & อยู่ในของฉันก็ตาม

& ไม่ป้องกันการประมวลผลเอาต์พุตที่จะเขียนลงในคอนโซล มันเพิ่งเริ่มต้นในพื้นหลัง
fschmitt

คำตอบนี้เกี่ยวข้องกับคำถามอย่างไร

@ Riccardo ฉันทดลองเล็กน้อยและฉันคิดว่าคุณพูดถูก แก้ไขแล้วขอบคุณ
Michael Mrozek
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.