คุณสามารถใช้exec ./your-script
เครื่องมือจำลองเทอร์มินัลเช่น GNOME ออกจากโปรแกรมเมื่อกระบวนการเริ่มต้นทำงานอยู่ภายในซึ่งโดยปกติจะเป็นเชลล์
หากคุณอยู่ในเทอร์มินัลแล้วและสิ่งเดียวที่คุณต้องการทำก่อนที่จะออกจากเทอร์มินัลนั้นคือการเรียกใช้สคริปต์ (หรือโปรแกรม) โดยเฉพาะนั่นหมายความว่าคุณไม่จำเป็นต้องใช้เชลล์ที่ทำงานอยู่อีกต่อไป ดังนั้นคุณสามารถใช้exec
builtin ของเชลล์เพื่อให้เชลล์แทนที่ตัวเองด้วยกระบวนการที่สร้างโดยคำสั่งของคุณ
- ในกรณีของสคริปต์ของคุณว่าเป็นกระบวนการของเชลล์ - เช่นเดียวกับวิธีการที่สอง
exec
กระบวนการเปลือกถูกสร้างขึ้นเมื่อคุณเรียกใช้สคริปต์โดยไม่ต้อง
ไวยากรณ์เช่นexec command
exec ./your-script
exec
: ตัวอย่าง
ตัวอย่างเช่นสมมติว่าฉันมีเชลล์สคริปต์ชื่อcount
ทำเครื่องหมายเรียกใช้และอยู่ในไดเรกทอรีปัจจุบัน มันมี:
#!/usr/bin/env bash
for i in {5..1}; do echo $i; sleep 1; done
และใน terminal ฉันทำงาน:
exec ./count
พิมพ์นี้เลข5
, 4
, 3
, 2
และ1
หนึ่งต่อวินาทีและจากนั้นสถานีปิดหน้าต่าง
หากคุณทำงานนี้จากสิ่งอื่นนอกเหนือจากขั้นตอนการทำงานครั้งแรกของคุณในขั้ว - ตัวอย่างเช่นถ้าคุณวิ่งbash
คนแรกที่จะเริ่มต้นเช่นเปลือกอีก - แล้วนี้จะนำคุณกลับไปยังเปลือกที่สร้างว่ากระบวนการมากกว่าการเลิกขั้ว (คำเตือนนี้ใช้กับexit
วิธีการแบบอิง)
คุณสามารถใช้./your-script; exit
หากคุณไม่ต้องการบอกให้เชลล์แทนที่ตัวเองด้วยกระบวนการใหม่ (ผ่านexec
) คุณสามารถบอกให้มันติดอยู่ แต่ออกจากตัวเองทันทีหลังจากกระบวนการใหม่เสร็จสิ้น
หากต้องการทำสิ่งนี้ให้เรียกใช้คำสั่งและคำสั่งของคุณexit
โดยคั่นด้วย;
เพื่อให้พวกเขาสามารถได้รับในบรรทัดเดียว
ไวยากรณ์เช่นcommand; exit
./your-script; exit
command; exit
เมื่อเทียบกับ command && exit
คุณอาจสังเกตเห็นว่าสิ่งนี้ดูคล้ายกับวิธีที่แนะนำในคำตอบของkosและheemayl ความแตกต่างคือ:./your-script && exit
&&
รันคำสั่งที่สองก็ต่อเมื่อคำสั่งแรกรายงานว่าประสบความสำเร็จโดยส่งคืนโค้ดออกจากศูนย์
;
รันคำสั่งที่สองไม่ว่าคำสั่งแรกจะรายงานความสำเร็จหรือไม่ก็ตาม
สิ่งที่คุณต้องการขึ้นอยู่กับสถานการณ์ที่เฉพาะเจาะจง หากคำสั่งล้มเหลวคุณต้องการให้เชลล์การโทร (และโฮสติ้งเทอร์มินัล) อยู่ต่อไปหรือไม่? ถ้าเป็นเช่นนั้นใช้&&
; ;
หากไม่ได้ใช้งาน
นอกจากนี้ยังมีcommand || exit
ซึ่งจบการทำงานเปลือกโทรเฉพาะในกรณีที่command
รายงานความล้มเหลว