มีวิธีการจัดทำภารกิจแบบอนุกรมบนเทอร์มินัลขณะที่งานกำลังดำเนินการ (โดยไม่ใช้ไฟล์) หรือไม่?


14

สมมติว่ามี 2 งานt1, t2ซึ่งสามารถดำเนินการได้ในทางอนุกรมดังต่อไปนี้:

t1 ; t2
# OR
t1 && t2

ตอนนี้สมมติว่าฉันลืมเรียกใช้t2และt1กำลังทำงานอยู่ ฉันสามารถเพิ่มt2ไปยังไปป์ไลน์เพื่อให้สามารถดำเนินการได้หลังจากt1เสร็จสิ้นหรือไม่

คำตอบ:


19

ใช่คุณสามารถ:

  1. หยุดงานที่กำลังทำงานอยู่กับระงับตัวละครโดยการกด+CtrlZ
  2. พิมพ์fgหรือ%เพิ่มสิ่งที่คุณต้องการในรายการและดำเนินการเช่น:
    fg ; systemctl suspend # or
    % ; systemctl suspend
    เนื่องจากfgส่งคืนค่าส่งคืนของงานที่ดำเนินการต่อรายการตัวดำเนินการที่ชอบ&&และ||ทำงานตามที่คาดไว้:
    fg && echo "Finished successfully!" # or
    % && echo "Finished successfully!"

man bash/ JOB CONTROLพูดเกี่ยวกับตัวละครที่ถูกระงับ:

พิมพ์ ระงับ ตัวอักษร (ปกติ ^Z, Control- Z) bashในขณะที่กระบวนการที่กำลังทำงานอยู่สาเหตุที่กระบวนการจะหยุดและผลตอบแทนในการควบคุม (... ) ผู้ใช้อาจจัดการกับสถานะของงานนี้โดยใช้bgคำสั่งเพื่อดำเนินการต่อในพื้นหลัง fg คำสั่งเพื่อดำเนินการต่อในเบื้องหน้าหรือkillคำสั่งเพื่อฆ่ามัน A มี^Zผลทันทีและมีผลข้างเคียงเพิ่มเติมที่ทำให้เกิดผลลัพธ์ที่รอดำเนินการและหัวพิมพ์จะถูกยกเลิก

fgอธิบายไว้ในman bash/ คำสั่งเชลล์อาคาร :

fg [ jobspec ]
Resume jobspecในเบื้องหน้าและทำให้งานปัจจุบัน หากjobspecไม่มีอยู่จะใช้แนวคิดของเชลล์ของงานปัจจุบัน ค่าส่งคืนคือคำสั่งที่วางไว้ในส่วนหน้าหรือความล้มเหลวหากรันเมื่อปิดการควบคุมงานหรือเมื่อเปิดใช้งานด้วยการควบคุมงานที่เปิดใช้งานหาก jobspec ไม่ได้ระบุงานที่ถูกต้องหรือjobspecระบุงานที่เริ่มโดยไม่มีการควบคุมงาน .

อ่านเพิ่มเติม (นอกเหนือจากman bash) ในการควบคุมงาน:


+1 แต่มันเป็นความอัปยศนี้ไม่ทำงานเมื่อคุณลืมt3ในหรือt1; t2; t3 t1 && t2 && t3
JoL

@JoL True นั้น - ^Z^Zและ%-;%+;t3ก็ดีพอในบางกรณี แต่มันก็ยังห่างไกลจากการแก้ปัญหาที่แท้จริง
ของหวาน

2

ฉันเห็นวิธีนี้ที่นี่: /superuser/334272/how-to-run-a-command-after-an-already-running-existing-one-finishes

โดยที่คุณทำCtrl+ zเพื่อหยุด (หยุดชั่วคราว) อันดับแรกจากนั้นคุณเรียกใช้คำสั่งที่ไม่ได้รับเช่น: fg && ./missed_cmd.shและมันจะทำงานทันทีที่fgเสร็จสิ้น

fg(หน้าคำสั่ง) จะนำงานระงับออนไลน์และ&&จะให้แน่ใจว่าคำสั่งที่ไม่ได้มีการเรียกใช้เฉพาะในกรณีที่คำสั่งแรกประสบความสำเร็จ

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