การสร้างหลายหน้าจอใน for for loop เพื่อรันโปรแกรม parellel และส่งคำสั่งไปยังแต่ละ


2

ก่อนที่จะตั้งค่าสถานะคำถามนี้ซ้ำซ้อนฉันได้อ่านและลองตอบทุกคำถามที่คล้ายกันโดยไม่ประสบความสำเร็จ

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

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

จะเกิดอะไรขึ้นคือรหัสจะรันในหน้าจอที่ใช้งานอยู่ในปัจจุบันและรหัสนั้นจะต่อเนื่องกันบนหน้าจอเดียวกัน ฉันต้องใช้หลายรุ่นในเวลาเดียวกันในหน้าจอที่แตกต่างกัน คุณช่วยได้ไหม

ฉันพยายามทั้งหมดเหล่านี้และมันไม่ทำงาน (ข้อผิดพลาด (ไม่พบซ็อกเก็ต) / ไม่มีอะไรเกิดขึ้นหรือเหมือนข้างต้น)

  1. screen -d -m ./runSimulator.sh 1 5 ผล $ '\ 012'
  2. screen -d -m -S results_ $ i -X screen $ (./ runSimulator.sh 1 5 ผลลัพธ์) $ '\ 012'
  3. screen -d -m -S results_ $ i หน้าจอ -S results_ $ i -X stuff $ (./ runSimulator.sh 1 5 รายการ) $ '\ 012'

กรุณาช่วย


1
อะไรคือเหตุผลที่คุณเลือกทำscreenแทนงานแบ็คกราวด์ที่เรียบง่ายด้วยการเปลี่ยนเส้นทางของ
Eugen Rieck

ฉันกำลังเชื่อมต่อกับเซิร์ฟเวอร์ระยะไกลและเรียกใช้ผ่าน ssh ดังนั้นฉันจึงใช้หน้าจอ
The Byzantine

1
ทำไมไม่ทำงานกับพื้นหลังด้วยการเปลี่ยนเส้นทางเข้า / ออกซึ่งเสร็จสมบูรณ์ทันทีจากนั้นใช้ IO ที่เปลี่ยนเส้นทางของคุณ (เช่นไปยัง / จาก FIFO) เพื่อโต้ตอบกับอินสแตนซ์? คุณใช้อะไรแฟนซีใน i / o (เช่น ncurses) ที่จะสร้างปัญหา?
Eugen Rieck

จริง ๆ แล้วฉันก็ทำตามที่คุณบอกฉัน ขอบคุณชาย ฉันเป็นสามเณรใน linux และการเขียนสคริปต์
The Byzantine

ดีใจที่ได้รับความช่วยเหลือ!
Eugen Rieck
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.