การรันไฟล์ bash ในหน้าต่างเทอร์มินัลใหม่และปิดหน้าต่างเมื่อทำเสร็จแล้ว


2

ฉันต้องการเปิดไฟล์ bash ในดาร์วินผ่าน:

open -n -a Terminal --args bashfile.sh

ไฟล์ bash นั้นดูเหมือนว่า:

#! /bin/sh
<application> <arguments>

มันทำงานได้ตามที่คาดไว้ แต่มีวิธีปิดหน้าต่างเทอร์มินัลเมื่อกระบวนการเสร็จสิ้นหรือไม่?

ฉันพยายามแล้วexit;และexit 0;แต่ไม่ประสบความสำเร็จ


สารละลายบางส่วน

ในการตั้งค่าของสถานี ( เทอร์มิ> การตั้งค่า> การตั้งค่า> เชลล์ ) คุณสามารถตั้งค่า 'เมื่อเปลือกที่มีอยู่' close the window if the shell exited cleanlyธง หากไม่มีสิ่งใดผิดพลาดสิ่งนี้จะปิดหน้าต่างเทอร์มินัลภายหลัง แต่ไม่ใช่แอปพลิเคชันดังกล่าว

คำตอบ:


2

หากนี่เป็นหน้าต่างเทอร์มินัลเพียงหน้าต่างเดียวคุณสามารถลองฆ่ากระบวนการจากสคริปต์ซึ่งจะยุติกระบวนการเทอร์มินัลและสคริปต์ทุบตีที่ทำงานอยู่ในนั้น ส่วนที่ยากที่สุดในที่นี้คือการกำหนดวิธีการฆ่าที่เหมาะกับคุณ วิธีที่ง่ายที่สุดคือทำ:

killall Terminal

ฉันเดาว่า windows Terminal หลาย ๆ ตัวทำงานในกระบวนการเดียวนั่นหมายความว่าคุณจะปิด windows ทั้งหมดหลังจากคำสั่งนี้

หากคุณใช้เทอร์มินัลอีมูเลเตอร์เป็นเครื่องมือหลักของคุณ (เช่น iTerm) แสดงว่าไม่มีปัญหา


ขอบคุณพาเวล! แต่น่าเสียดายที่นี่เป็นการปิดหน้าต่างเทอร์มินัลทั้งหมด
p2 หรือ

1

คุณแท็กแต่ shebang /bin/shจุดที่จะต้อง ฉันคิดว่าshมีการเชื่อมโยงกับbashระบบของคุณ

ลอง

kill $PPID

ในตอนท้ายของสคริปต์ของคุณ เมื่อ$PPIDขยายไปถึง ID กระบวนการของพาเรนต์เชลล์ควรทำลายสิทธิ์Terminalและปล่อยให้อินสแตนซ์อื่นอยู่คนเดียว

ใน Ubuntu ของฉันTerminalคือโปรแกรมจำลองเทอร์มินัล GNUstep ฉันไม่ทราบว่าคุณมีความคล้ายคลึงกันแค่ไหน

นอกจากนี้Terminal(แพ็คเกจterminal.app, เวอร์ชั่น0.9.8-1+nmu1build1, ระบบปฏิบัติการของฉันUbuntu 14.04.5 LTS) มักจะทำงานผิดปกติเมื่อได้รับสัญญาณจากภายในสคริปต์ มันแขวนอย่างสิ้นหวัง ข้อผิดพลาดฉันเดา วิธีเดียวที่จะฆ่ามันได้อย่างมั่นคงคือการใช้กำลัง:

kill -SIGKILL $PPID

ฉันคิดว่ามันเป็นสิ่งที่เฉพาะเจาะจงของ OSX ฉันแน่ใจว่าสิ่งนี้จะทำงานบน linux แต่ที่นี่มีบางสิ่งที่ดูเหมือนจะบล็อกคำสั่ง kill หน้าต่างเทอร์มินัลปิดตามที่คาดไว้ แต่แอปพลิเคชันยังคงทำงานอยู่ อย่างไรก็ตามขอบคุณ Kamil!
p2 หรือ

0

หน้า Bash man มีส่วนในพารามิเตอร์พิเศษ สิ่งที่คุณต้องการคือ$$ซึ่งจะขยายไปยัง PID ของเชลล์ปัจจุบัน

kill $$ ควรทำสิ่งที่คุณต้องการแม้ว่าฉันจะอยู่บน Win7 ตอนนี้และไม่สามารถทดสอบได้


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