ทำไม "exec false" ปิดเทอร์มินัลอย่างไร


8

ฉันรู้ว่านี่อาจเป็นคำถามที่ไม่มีจุดหมาย แต่ฉันอยากรู้ว่าทำไมexec falseปิดเทอร์มินัลเหมือนอย่างที่exitทำ

ฉันต้องการทราบว่านี่เป็นวิธีที่ยอมรับได้ในการปิดเครื่องหรือไม่


คำตอบ:


10

exec falseกำลังแทนที่เชลล์ปัจจุบันโดยการดำเนินการของคำสั่งfalse(ที่นี่ไม่ใช่เชลล์บิวด์อิน แต่/bin/falseหรือสิ่งที่falseสามารถเรียกใช้งานได้ซึ่งมาก่อนPATH) ซึ่งจะออกอย่างรวดเร็ว หากเชลล์เป็นกระบวนการสูงสุดที่รันในเทอร์มินัลอีมูเลเตอร์ของคุณจะไม่มีกระบวนการใดทำงานอยู่ภายในดังนั้นเทอร์มินัลอีมูเลเตอร์จะปิดลง

นี่เป็นวิธีทางเลือกที่ยอมรับได้เพื่อปิดเทอร์มินัลเหมือนกับคำสั่งที่คล้ายกันมากมาย:

exec true
exec sleep 0
exec echo
...

ดูเพิ่มเติม: what-do-an-exec-command-do


ตามบันทึกข้าง, bashจะดำเนินการล้างบางอย่างก่อนที่จะกล่าวอ้างรวมทั้งคำสั่งเขียนexec .bash_historyดังนั้นหากเพียงแค่ต้องการที่จะบันทึกลง.bash_historyและเปิดเปลือกใหม่ในหน้าต่าง terminal exec bashเดียวกันหนึ่งสามารถทำได้โดยการพิมพ์
kasperd

ขอบคุณตกลงคุณตอบคำถามของฉันอย่างสมบูรณ์แบบ :)
dragonloverlord

และเป็นคำถามที่ดี! ดังนั้นทั้งสองจึง upvoted! ;)
Fabby

@jiliagre execเรียกใช้คำสั่งที่พบในตัวPATHเครื่องไม่ใช่ในตัว ตัวอย่างเช่นexec [[ $USER = root ]]จะส่งคืนbash: exec: [[: not foundข้อผิดพลาด ในกรณีของ OP falseที่เรียกว่า is /bin/falseและไม่ใช่ shell ในตัว มิฉะนั้นคำตอบที่ดีจึง +1 ในฐานะที่เป็นบันทึกด้านข้างexecสามารถเรียงลำดับของคำสั่งแบบตัดออกได้เช่นถ้าคำสั่งทั้งสามในตัวอย่างของคุณถูกสร้างเป็นสคริปต์จะไม่มีสิ่งใดเกินกว่าสิ่งแรกที่execจะทำได้เพราะexecจะแทนที่เชลล์ที่เรียกโดยสคริปต์ด้วยคำสั่งใด ๆ execของ
Sergiy Kolodyazhnyy
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.