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


24

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

คำตอบ:


23

สมมติว่าคำสั่งของคุณถูกเรียกmycommandฉันจะเปลี่ยนตัวเรียกใช้ของฉันเพื่อเรียกใช้สิ่งนี้:

gnome-terminal -e "mycommand|less"

หากคุณต้องการวิธีแก้ปัญหาที่ถาวรกว่าและสะอาดกว่าเปิด gnome-terminal แล้วไปที่แก้ไขการตั้งค่าโปรไฟล์และคลิกแท็บชื่อและคำสั่ง เปลี่ยนตัวเลือก "ออกคำสั่งเมื่อ" เป็น "เปิดเทอร์มินัลค้างไว้"

เมื่อคุณรันคำสั่งตอนนี้มันควรเปิดเทอร์มินัลเมื่อมีบางสิ่งทำงานอยู่

แก้ไข: ถ้าคุณไม่สนใจเทอร์มินัลจริงๆคุณสามารถใช้เครื่องหมายพักของ xterm:

xterm -e "mycommand" hold

7
เพื่อให้การดำเนินการของเทอร์มินัลเริ่มต้น 'เมื่อคำสั่งออกจากการทำงาน' ฉันขอแนะนำให้สร้างโปรไฟล์เทอร์มินัลใหม่ตั้งให้เปิดอยู่หลังจากคำสั่งออกแล้วผ่าน--tab-with-profile=PROFILENAMEตัวเลือกgnome-terminal คุณสามารถมีโปรไฟล์จำนวนมากสำหรับบาฮาวีที่แตกต่างกันด้วยวิธีนี้ :-)
กลับใน

1
xterm -hold -e mycommand

8

ตัวเรียกใช้ของคุณกำลังเรียกใช้สคริปต์ใช่ไหม

ในตอนท้ายของสคริปต์ของคุณเพิ่ม

read -p "Press any key to exit > " -n1 junk
echo 

จากนั้นสคริปต์ของคุณจะรอจนกว่าคุณจะเลือกที่จะจบ


1
+1 และเพื่อแสดงพรอมต์เฉพาะเมื่อคำสั่งล้มเหลว (ส่งคืนรหัสทางออกที่ไม่เป็นศูนย์) สิ่งหนึ่งที่ทำได้command || read -n1 -p "Command failed. Press any key to exit..."
Jukka Matilainen

8

ในทางลัด .desktop ของคุณใช้สิ่งนี้

Exec=gnome-terminal -x bash -c "YOUR_SCRIPT; exec $SHELL"

หลังจากสคริปต์ของคุณเสร็จสิ้นกระบวนการ Bash จะแทนที่ตัวเองด้วยการร้องขอใหม่ของตัวเอง

หากคุณต้องการส่งอาร์กิวเมนต์ที่อ้างถึงไปยังสคริปต์ของคุณคุณจะต้องหลีกเลี่ยงอัญประกาศ:

Exec=gnome-terminal -x bash -c "YOUR_SCRIPT \"arg with spaces\"; exec $SHELL"

3

แนวทางที่แตกต่างกันเล็กน้อยจากคำตอบอื่น ๆ : เรียกใช้คำสั่งของคุณและหากล้มเหลวให้วางไข่เปลือก วิธีนี้คุณไม่จำเป็นต้องปิดเทอร์มินัลค้างไว้ (ซึ่งไม่แยกความแตกต่างระหว่างความสำเร็จของคำสั่งหรือความล้มเหลว) และคุณอาจพบว่าเชลล์นั้นมีประโยชน์อย่างยิ่งในความล้มเหลว หากต้องการปิดเพียงแค่ใช้ Ctrl-D (EOF), "exit", Alt-F4 (หรือตัวจัดการหน้าต่างที่คุณใช้เพื่อปิดหน้าต่าง) ฯลฯ

ประสบความสำเร็จหรือเปลือก

#!/bin/sh
[ $# -eq 0 ] && {
  echo "$(basename $0): no command" >&2
  exit 1
}
"$@" || {
  echo "failed: $?"
  exec $SHELL
}

วางไฟล์นี้ไว้ที่ใดที่หนึ่งเช่น ~ / bin จากนั้นใช้ "success-or-shell คำสั่งดั้งเดิมของคุณ" ในตัวเรียกใช้งานของคุณ


0

คำตอบนี้ให้คำตอบที่ดีที่สุดที่ฉันเคยเห็นเพื่อทำสิ่งที่คุณต้องการ พวกเขาแนะนำให้สร้างสคริปต์ด้วยคำสั่งเพื่อดำเนินการและใช้กับพารามิเตอร์ --init-file (เฉพาะทุบตี แต่คุณอาจทำเช่นเดียวกันสำหรับ csh / tcsh / zsh ฯลฯ ):

#!/bin/bash --init-file
commands to run

... และดำเนินการตาม:

xterm -e /path/to/script
# or
gnome-terminal -e /path/to/script
# or
the-terminal -e bash --init-file /path/to/script/with/no/shebang

0

ใช้watchคำสั่ง

รูปแบบ: watch -n60 myCommandหรือwatch -n60 "my command string"

  • -nระบุจำนวนวินาทีที่รอระหว่างการโทรไปยังmyCommand ; ตัวอย่าง: คำสั่งด้านบนจะเรียกmyCommandทุก ๆ 60 วินาทีตลอดไป
  • "my command string"หากคำสั่งมีหลายคำใส่ไว้ในคำพูดสอง:

สมมติว่าคุณต้องการตัวเรียกใช้งานซึ่งแสดงการใช้งานดิสก์และเปิดให้ผู้อ่านเห็นได้ตลอดเวลา ฉันแค่ใช้คำสั่งนี้ภายในตัวเรียกใช้:
watch -n60 "df -h"ซึ่งจะเรียกใช้df -hทุกๆ 60 วินาที

ฉันชอบสิ่งนี้มากกว่าคำตอบที่ยอมรับgnome-terminal -e "mycommand|less"เพราะฉันใช้ Xubuntu ซึ่งใช้เทอร์มินัลอื่นตามค่าเริ่มต้น


0

ลองคลิกขวาที่ตัวเรียกใช้และป้อนคุณสมบัติ

ควรมีตัวเลือกให้เปิดหน้าต่างเทอร์มินัล ป้อนคำอธิบายรูปภาพที่นี่

ในไฟล์ .desktop ควรมีรายการ X-KeepTerminal=true

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