ใช้ & (เครื่องหมายแอมเปอร์แซนด์) ในการวนซ้ำบรรทัดเดียว


58

ฉันใช้คำสั่งนี้เรียบร้อยแล้วซึ่งเปลี่ยนตัวแปรในไฟล์ปรับแต่งแล้วเรียกใช้งานสคริปต์ Python ภายในลูป:

for((i=114;i<=255;i+=1)); do echo $i > numbers.txt;python DoMyScript.py; done

เนื่องจากDoMyScript.pyตัวมันเองใช้เวลาประมาณ 30 วินาทีในการวิ่งก่อนที่จะยุติฉันต้องการผลักไสพวกมันให้เป็นแบ็คกราวน์ในขณะที่อีกอันสามารถเกิดใหม่ได้

ฉันได้ลองสิ่งที่ฉันคุ้นเคยแล้วโดยเพิ่มแอมเปอร์แซนด์เป็นด้านล่าง:

for((i=114;i<=255;i+=1)); do echo $i > numbers.txt;python DoMyScript.py &; done

อย่างไรก็ตามผลลัพธ์นี้มีข้อผิดพลาดด้านล่าง:

-bash: ข้อผิดพลาดทางไวยากรณ์ใกล้โทเค็นที่ไม่คาดคิด `; '

คำตอบ:


85

วางหลัง; &นี่เป็นข้อกำหนดทางวากยสัมพันธ์

for((i=114;i<=255;i+=1)); do echo $i > numbers.txt;python DoMyScript.py & done

1
ประณามมัน 43 วินาทีช้าเกินไป :)
มาร์ตินฟอน Wittich

2
@MartinvonWittich +1 คำตอบของคุณโดย
commiseration

4
ในขณะที่ตอบคำถามที่ว่ามันอาจจะไม่ใช่สิ่งที่สหกรณ์ต้องการเป็นตามเวลาที่ทุกกรณีหลามได้เริ่มต้นและ initialises พวกเขาทั้งหมดจะเห็นมีnumbers.txt 255
Stéphane Chazelas

1
เห็นด้วยกับ @StephaneChazelas แต่ไม่แน่ใจว่าเราสามารถทำอะไรได้บ้างกับข้อมูลที่ให้ไว้ในคำถาม ทางออกที่เหมาะสมในการที่อาจต้องบริบทเพิ่มเติม
CVn

3
นี่คือคู่มืออ้างอิง bash: gnu.org/software/bash/manual/bashref.html#Lists
glenn jackman

14

ได้รับความคิดเห็นของ Stephane ในคำตอบของ 1_CRคุณอาจต้องการ:

for i in {114..255}; do { echo $i > numbers.txt && python DoMyScript.py; } & done

ขอบคุณเกล็น ฉันลองรหัสของคุณหลายรูปแบบที่ฉันชอบเนื่องจากความสามารถในการอ่านที่เพิ่มขึ้น แต่อาจเป็นเพราะฉันต้องการการนอนเพิ่มพิเศษมันไม่ได้ผลสำหรับฉัน มันจะทำซ้ำตัวเลขสุดท้ายในforช่วง ... นี่คือสิ่งที่ฉันมีความสุขในขณะนี้: for((i=1;i<100;i+=1)); do echo $i > numbers.txt;sleep 3; python DoMyScript.py & doneจุดคำถามหลักของการทำให้กระบวนการทำงานในพื้นหลังได้รับการแก้ไข
ljs.dev

* แน่นอนฉันมี<=คำถามเดิมดังนั้นช่วงที่คุณระบุมีความเหมาะสมอย่างสมบูรณ์ตามข้อมูลที่ฉันให้มา ขอขอบคุณอีกครั้งสำหรับวิธีการที่แตกต่างกัน
ljs.dev

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