คำสั่ง bash แบบไม่บล็อค


11

สมมติว่าฉันมีสคริปต์ทุบตีต่อไปนี้:

#!/bin/sh
gedit
rm *.temp

เมื่อผมดำเนินการโดยใช้sh ./test.sh, geditปรากฏขึ้น แต่ส่วนหนึ่งไม่ทำงานจนกว่าหลังจากที่ผมใกล้ชิดrmgedit

ฉันต้องการให้สคริปต์ทำงานต่อไปแม้ว่าgeditจะไม่ได้ปิด เช่นเดียวกับที่geditไม่ได้ปิดกั้นการดำเนินการทุบตี

ตัวอย่างที่ฉันให้ไว้เป็นเพียงตัวอย่าง (การวางไว้rmก่อนจะไม่ทำงานในสถานการณ์จริง)

คำตอบ:


25

คำที่คุณกำลังมองหาเรียกว่า "พื้นหลัง" งาน เมื่อคุณเรียกใช้คำสั่งในเชลล์หรือในสคริปต์คุณสามารถเพิ่มแฟล็กที่ส่วนท้ายเพื่อส่งไปยังพื้นหลังและรันคำสั่งใหม่หรือดำเนินการกับสคริปต์ต่อไป ในเชลล์ส่วนใหญ่รวมถึงshนี่คือ&ตัวละคร

#!/bin/sh
gedit &
rm ./*.temp

ด้วยวิธีนี้เชลล์จะไม่รอการยกเลิกgeditและทั้งคู่rmและgeditจะทำงานพร้อมกัน

คำว่า "การบล็อก" มักเกี่ยวข้องกับอินพุต / เอาต์พุตสตรีมไฟล์หรืออุปกรณ์ นอกจากนี้ยังใช้ในภาษาที่คอมไพล์ในบางสิ่งที่คล้ายกับความรู้สึกที่คุณใช้ แต่ใน bash และเชลล์สคริปต์ที่คล้ายคลึงกันคำศัพท์ (และฟังก์ชั่น!) ค่อนข้างแตกต่างกัน


ขอบคุณ! ที่อธิบายว่าทำไมฉันได้รับ Fifo และผลลัพธ์การป้อนใน google: D
Plante

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

@user: ฉันพาคู่รักไปอ่านเพื่อคาดเดาสิ่งที่เขาต้องการ บางทีคุณสามารถแสดงความคิดเห็นคำถามเพื่อชี้แจง
Caleb

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