ก่อนที่จะตั้งค่าสถานะคำถามนี้ซ้ำซ้อนฉันได้อ่านและลองตอบทุกคำถามที่คล้ายกันโดยไม่ประสบความสำเร็จ
ฉันมีวงนี้ที่มันสำรวจโครงสร้างไดเรกทอรีและเรียกใช้โปรแกรม (ซึ่งใช้เวลานาทีเพื่อเสร็จสิ้น) ในแต่ละไดเรกทอรีย่อยในหน้าจอแยก ฉันไม่ต้องการที่จะเห็นผลลัพธ์ของหน้าจอและต้องการให้พวกเขาทั้งหมดเพื่อรันโปรแกรมในพื้นหลังในแบบคู่ขนาน จนถึงตอนนี้ฉันมี
for ((i = 1; i <= noLines; i++))
do
# code to change path to point to next executable goes here
screen -d -m -S results_$i -X stuff $(./runSimulator.sh 1 5 results) $'\012'
done
จะเกิดอะไรขึ้นคือรหัสจะรันในหน้าจอที่ใช้งานอยู่ในปัจจุบันและรหัสนั้นจะต่อเนื่องกันบนหน้าจอเดียวกัน ฉันต้องใช้หลายรุ่นในเวลาเดียวกันในหน้าจอที่แตกต่างกัน คุณช่วยได้ไหม
ฉันพยายามทั้งหมดเหล่านี้และมันไม่ทำงาน (ข้อผิดพลาด (ไม่พบซ็อกเก็ต) / ไม่มีอะไรเกิดขึ้นหรือเหมือนข้างต้น)
- screen -d -m ./runSimulator.sh 1 5 ผล $ '\ 012'
- screen -d -m -S results_ $ i -X screen $ (./ runSimulator.sh 1 5 ผลลัพธ์) $ '\ 012'
- screen -d -m -S results_ $ i หน้าจอ -S results_ $ i -X stuff $ (./ runSimulator.sh 1 5 รายการ) $ '\ 012'
กรุณาช่วย
ฉันกำลังเชื่อมต่อกับเซิร์ฟเวอร์ระยะไกลและเรียกใช้ผ่าน ssh ดังนั้นฉันจึงใช้หน้าจอ
—
The Byzantine
ทำไมไม่ทำงานกับพื้นหลังด้วยการเปลี่ยนเส้นทางเข้า / ออกซึ่งเสร็จสมบูรณ์ทันทีจากนั้นใช้ IO ที่เปลี่ยนเส้นทางของคุณ (เช่นไปยัง / จาก FIFO) เพื่อโต้ตอบกับอินสแตนซ์? คุณใช้อะไรแฟนซีใน i / o (เช่น ncurses) ที่จะสร้างปัญหา?
—
Eugen Rieck
จริง ๆ แล้วฉันก็ทำตามที่คุณบอกฉัน ขอบคุณชาย ฉันเป็นสามเณรใน linux และการเขียนสคริปต์
—
The Byzantine
ดีใจที่ได้รับความช่วยเหลือ!
—
Eugen Rieck
screen
แทนงานแบ็คกราวด์ที่เรียบง่ายด้วยการเปลี่ยนเส้นทางของ