วิธีผนวกคำสั่งแบบมีเงื่อนไขเข้ากับคำสั่งที่รันอยู่แล้ว?


1

สมมติว่าฉันมีสามคำสั่งที่ฉันเรียกใช้เช่นนี้

a && b && c

สิ่งนี้จะรัน b หลังจากเสร็จสิ้นและ c หลังจาก b เสร็จสมบูรณ์

ถ้าฉันทำสิ่งนี้:

a && b

ขณะที่สิ่งนี้กำลังทำงานอยู่ฉันต้องการผนวก c เป็นคำสั่งแบบมีเงื่อนไข มันสามารถทำได้?


นี่เป็น Linux หรือ MacOSX หรือไม่ หากมีข้อสงสัยให้แท็กด้วยเชลล์ที่ใช้
Bobby

ฉันใช้ OSX แต่ควรเหมือนกับ Linux
tony_sid

ไม่ MacOSX เป็น Unix และ Linux เป็น Linux นอกจากนี้ยังมีเชลล์จำนวนมากที่แตกต่างกันสำหรับ Linux ซึ่งอาจมีวิธีแก้ไขปัญหาที่แตกต่างกัน
Bobby

1
@ บ๊อบบี้นอกจากนี้ยังมีเชลล์ที่แตกต่างกันใน OSX แต่ไม่ได้รับข้อมูลที่ตรงกันข้าม bash เป็นสมมติฐานที่ดี
Daniel Beck

คำตอบ:


2

ฉันจะทำสิ่งนี้:

  • a && b
  • กด ctrl-Z เพื่อระงับไปป์ไลน์ปัจจุบัน
  • bg 1 เพื่อเรียกใช้เป็นพื้นหลัง
  • wait %1 && c

wait รอให้งานที่ระบุดำเนินการจนเสร็จสิ้นและส่งกลับสถานะผลลัพธ์ a && b && c ควรจะมี.

นอกจากนี้คุณยังสามารถกำหนดนามแฝงหรือฟังก์ชั่นเช่น alias bgwait='bg 1 && wait %1'. จากนั้นหลังจากกด ctrl-Zสิ่งที่คุณต้องพิมพ์คือ bgwait && c. การสนับสนุนงานหลายงานจะถูกทิ้งไว้เป็นแบบฝึกหัดสำหรับผู้อ่าน


0

ผลลัพธ์ของการดำเนินการครั้งสุดท้ายถูกเก็บไว้ใน $?. 0 หมายถึงไม่มีข้อผิดพลาดเกิดขึ้นสิ่งอื่นเป็นปัญหา

คุณสามารถเช่น ใช้มันแบบนี้

if [ $? -eq 0 ]; then c; fi

ทำให้ฟังก์ชั่นหรือคล้ายกันในของคุณ .bash_profile และคุณสามารถรันได้อย่างสะดวกสบายยิ่งขึ้น


ดังนั้นฉันจะพิมพ์คำสั่งนี้ได้อย่างไรหากโปรแกรมทำงานอยู่แล้ว? ฉันจะเปิดเทอร์มินัลอื่นหรือไม่
tony_sid

@OSXJedi คุณเพิ่งพิมพ์มัน (สมมติว่าโปรแกรมที่รันอยู่ในปัจจุบันไม่มีอินพุต) มันจะถูกเรียกใช้งานหลังจากที่โปรแกรมของคุณหยุดทำงานไม่แตกต่างจากการพิมพ์หลังจากนั้นยกเว้นว่าคุณไม่จำเป็นต้องรอ b ก่อนออกจากเครื่อง
Daniel Beck

-2

สำหรับ NT คุณสามารถพิมพ์คำสั่งใหม่ของคุณและกด ENTER ในขณะที่คำสั่งปัจจุบันกำลังทำงาน

ตัวอย่างเช่น

c: \ blah & gt; dir / s

ที่ blah ใหญ่พอที่คุณจะมีเวลาพิมพ์ในขณะที่สิ่งต่าง ๆ เลื่อนบนหน้าจอ

ตอนนี้ทุกสิ่งนี้เลื่อนบนหน้าจอ

และในขณะที่มันปรากฏขึ้นให้พิมพ์ mem

จากนั้นหลังจาก dir / s เสร็จสมบูรณ์ mem จะทำงาน


คำถามเกี่ยวกับ เงื่อนไข คำสั่ง ( && )
grawity

และมันก็ไม่เกี่ยวกับ Windows
Bobby

รอก่อน. เมื่อฉันตอบเขายังไม่ได้พูดในสิ่งที่ระบบปฏิบัติการ ดังนั้นฉันจึงคิดว่ามันเป็นคำถามทั่วไปและให้คำตอบว่าอะไรที่ใช้ได้กับ NT และประการที่สอง ถ้าคุณคิดเกี่ยวกับมันคำตอบของฉันเป็นจริงของ "คำสั่งตามเงื่อนไข" มันเป็นอย่างนั้น หากเขาใช้งาน & amp; & amp; b และเขาต้องการให้มันทำราวกับว่าเขาทำ & amp; & amp; b & amp; & amp; c แต่เขาไม่ได้ใส่ & amp; & amp; c ในนั้น เขาสามารถทำตามที่ฉันพูด และมันทำงานแบบมีเงื่อนไขในลักษณะเดียวกัน มันไม่ได้เหรอ?
barlop

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

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