วิธีรัน xfce-terminal ด้วยคำสั่งต่าง ๆ ต่อแท็บและใช้งานแท็บต่อไปหลังจากที่คำสั่งส่งคืนแล้ว?


20

เพื่อให้ภาพรวมฉันต้องการวางคำสั่งหลายคำสั่งในลำดับเดียวกันเสมอและเริ่มต้นโดยอัตโนมัติพร้อมกัน (gradle, git, ฐานข้อมูล, scala-REPL, jboss ... )

- H (พัก) ดูเหมือนว่าหมายความว่าเครื่องจะไม่ปิดหลังจากการยกเลิก แต่ฉันจะยุติกระบวนการดังกล่าวโดยจงใจได้อย่างไร? ไม่ใช่เลย? ในลักษณะที่ฉันสามารถใช้งานเทอร์มินัลต่อไปได้

ฉันใช้ xubuntu กับ xfce4-terminal และ bash มีวิธีแก้ปัญหา GUI ที่ดีกว่าในการเริ่มต้นหลายคำสั่งพร้อมความสามารถในการทำงานในหน้าต่าง / แท็บนั้นต่อไปหรือไม่?

อัปเดต:หากคุณไม่ทราบคำสั่งเหล่านี้: Jboss และ gradle กำลังสร้างเอาต์พุตอย่างต่อเนื่องซึ่งคุณไม่ต้องการผสมในเทอร์มินัลเดียวกัน และบางครั้งพวกเขาจำเป็นต้องถูกขัดจังหวะด้วย ^ C และเริ่มต้นใหม่ ฉันไม่ชอบที่จะเปิด xfce4 ระยะใหม่และนำทางไปยังไดเรกทอรีที่ฉันต้องทำ

ฐานข้อมูลและ scala-REPL มีการโต้ตอบดังนั้นจึงไม่มีความรู้สึกในการเริ่มต้นพวกเขาในพื้นหลัง

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

xfce4-terminal -T eclipse   --working-directory=/home/stefan/oximity -e "/opt/eclipse/eclipse" \
    --tab -T arandr --working-directory=/home/stefan/oximity -e "arandr /home/stefan/.screenlayout/oximity.sh" \
    --tab -T bash       --working-directory=/home/stefan/oximity \
    --tab -T gradle     --working-directory=/home/stefan/oximity/med \
    --tab -T git        --working-directory=/home/stefan/oximity/med \
    --tab -T mysql      --working-directory=/opt/mini/mysql \
    --tab -T jboss      --working-directory=/opt/mini/jboss \
    --tab -T jboss-log  --working-directory=/opt/mini/jboss/standalone/log \
    --tab -T scala-REPL --working-directory=/home/stefan/proj/mini/forum -e /opt/scala/bin/scala

Eclipse และ arandr ถูกแยกออกจากเชลล์และรันในหน้าต่างของตนเองดังนั้นจึงมีการทำงานของพารามิเตอร์ -e (execute) ฉันคิดว่าสำหรับ scala-REPL มันใช้งานได้เพราะมันเป็นคำสั่งสุดท้ายในรายการ


คำถามของคุณยังไม่ชัดเจนสำหรับฉัน คุณต้องการให้เทอร์มินัลเปลี่ยนกลับไปใช้เชลล์เมื่อคำสั่งนั้นเริ่มต้นด้วยการยกเลิก? สิ่งที่ชอบxterm -e 'stuff;bash'?
frostschutz

1
คำถามนี้ยังต้องการทำงาน! ฉันพบกระทู้นี้ฉันคิดว่านี่เป็นสิ่งที่ OP กำลังมองหา: จะเปิด xfce4-terminal ได้อย่างไร? . เขาต้องการทราบวิธีการเข้าถึงแท็บที่ใช้สวิตช์ "-H" และใช้เป็นหน้าต่างเทอร์มินัลปกติต่อไป OP คุณช่วยยืนยันได้ไหมว่าฉันถูกต้อง?
slm

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

คำตอบ:


21

-H/-holdตัวเลือกคือการทำให้หน้าต่างจำลอง terminal เปิดการใช้งานครั้งเดียวเริ่มต้นในมัน (เปลือกหรืออื่น ๆ ) ได้ออก ในสถานะนั้นจะไม่มีอะไรเกิดขึ้นอีก

หากคุณต้องการเริ่มต้นคำสั่งเป็นงานของเชลล์แบบโต้ตอบในเทอร์มินัลจำลอง xfce4-terminal และให้เชลล์ทำงานต่อเนื่องและใช้งานแบบโต้ตอบหลังจากที่แอปพลิเคชันออกไปbashคุณสามารถใช้$PROMPT_COMMANDตัวแปรสภาพแวดล้อมเพื่อxfce-terminalเริ่มต้น เชลล์เชิงโต้ตอบที่เริ่มต้นคำสั่งที่กำหนดก่อนหน้าพรอมต์แรก

xfce4-terminal \
  -T eclipse \
  --working-directory=/home/stefan/oximity \
  -e 'env PROMPT_COMMAND="unset PROMPT_COMMAND; /opt/eclipse/eclipse" bash' \
  \
  --tab -T arandr \
  --working-directory=/home/stefan/oximity \
  -e 'env PROMPT_COMMAND="unset PROMPT_COMMAND; arandr /home/stefan/.screenlayout/oximity.sh" bash' \
  \
  --tab -T bash \
  --working-directory=/home/stefan/oximity \
  ...

ด้วยวิธีนี้คำสั่งคืองานของเชลล์นั้นซึ่งหมายความว่าคุณสามารถระงับพวกเขาด้วยCtrl-Zและกลับมาทำงานได้ในภายหลังด้วยfg/bgราวกับว่าคุณได้ป้อนคำสั่งเหล่านั้นที่พรอมต์ของเชลล์แบบโต้ตอบนั้น

ที่ถือว่าว่าที่คุณไม่ได้ตั้งค่าในของคุณ$PROMPT_COMMAND นอกจากนี้ทราบว่าออกจากสถานะของคำสั่งจะไม่อยู่ในที่มีอยู่~/.bashrc$?

เพื่อให้มันเหมือนคำสั่งที่ป้อนที่ shell prompt คุณสามารถเพิ่มมันเข้าไปในรายการประวัติได้ ชอบ:

xfce4-terminal -T /etc/motd -e 'env PROMPT_COMMAND="
  unset PROMPT_COMMAND
  history -s vi\ /etc/motd
  vi /etc/motd" bash'

ด้วยวิธีนี้เมื่อคุณออกviคุณสามารถกดUpปุ่มเพื่อจำviคำสั่งเดียวกันนั้นได้

วิธีเขียนที่ง่ายขึ้น:

PROMPT_COMMAND='unset PROMPT_COMMAND; history -s "$CMD"; eval "$CMD"' \
  xfce4-terminal --disable-server \
          -T /etc/motd -e 'env CMD="vi /etc/motd" bash' \
    --tab -T       top -e 'env CMD=top bash'

ไปนี้:

xfce4-terminal -e 'sh -c "cmd; exec bash"'

วิธีการแก้ปัญหาตามที่ระบุในคำตอบอื่น ๆ ใช้งานได้ แต่มีข้อเสีย:

  1. หากคุณกดCtrl-Cในขณะที่cmdกำลังทำงานอยู่ที่ฆ่านอกshเนื่องจากมีกลุ่มกระบวนการเพียงคนเดียวสำหรับทั้งและshcmd
  2. คุณไม่สามารถใช้Ctrl-Zระงับได้cmd
  3. เช่นเดียวกับในวิธีการออกจากสถานะของคำสั่งจะไม่สามารถใช้ได้ใน$PROMPT_COMMAND$?

คุณสามารถทำงานได้ประมาณ1 ข้อโดยทำดังนี้

xfce4-terminal -e 'sh -c "trap : INT; cmd; exec bash"'

หรือ:

xfce4-terminal -e 'sh -ic "cmd; exec bash"'

คุณจะสามารถระงับกระบวนการด้วยCtrl-Zแต่คุณจะไม่สามารถใช้งานfg/bgได้ คุณจะสามารถที่จะดำเนินการต่อในพื้นหลัง แต่ด้วยการทำkill -s CONTในpidcmdของ


ว้าว. มันค่อนข้างซับซ้อน แต่ดูเหมือนว่าจะทำงาน :) ฉันไม่รู้ว่าทำไมรางวัลถึงหายไป โชคไม่ดีที่ฉันไม่ได้มีเวลาก่อนที่จะทดสอบคำแนะนำ
ผู้ใช้ที่ไม่รู้จัก

ฉันไม่เข้าใจกฎทั้งหมดของระบบเงินรางวัล เนื่องจากฉันคิดว่าคุณสมควรได้รับรางวัลฉันจึงเริ่มรางวัลใหม่
ผู้ใช้ที่ไม่รู้จัก

ใช่เงินรางวัลจะหมดอายุหลังจาก 7 วันและคุณมีเวลา 24 ชั่วโมงหลังจากนั้นเพื่อให้รางวัล หากคุณไม่ทราบว่าพวกเขาได้รับมอบหมายให้กับผู้ใช้ที่มีตัวแทนสูงสุด (2 หรือสูงกว่า) นี่เป็นมากกว่าที่คุณอยากรู้เกี่ยวกับค่าหัว
slm

1
@AdrianLopez ในbashสคริปต์มีประวัติศาสตร์ที่ทุกคนไม่เป็นไม่มีการตัดต่อสายหรือโต้ตอบกับผู้ใช้เว้นแต่คุณจะใช้read -eในสคริปต์ของคุณ (และคุณจะเห็นว่าhistory -s textทำงานอยู่ที่นั่นนายกประวัติศาสตร์มองเห็นได้โดยที่read -e) ที่นี่เราไม่ได้ทำงานhistory -sจากสคริปต์ แต่มาจาก$PROMPT_COMMANDเบ็ดของเชลล์แบบโต้ตอบ
Stéphane Chazelas

1
@ StéphaneChazelasน่าทึ่ง ทำตามคำตอบที่มีค่าอื่น ๆ ของคุณที่นี่ฉันต้องเพิ่มนั่นxfce4-terminalเป็นอย่างน้อยรุ่น 0.6.3 ตอนนี้ต้องการพารามิเตอร์พิเศษ - --disable-server- เพื่อผ่านสภาพแวดล้อม Ref: lists.debian.org/debian-user/2017/10/msg00045.html
ジョージ

5

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

ถ้าฉันพูดถูกก็สามารถทำได้โดยใช้คำสั่งเช่นนี้:

xfce4-terminal -e "bash -c 'COMMAND; exec bash'"

ใช้ได้กับหลายแท็บหรือไม่
ไม่ทราบผู้ใช้

@userunknown แน่นอน เพียงเพิ่ม - กดแท็บหน้าคำสั่งอื่น ๆ ตัวอย่างเช่นหากคุณต้องการเรียกใช้ "ls / etc" และ "ls / dev" คุณจะออก: xfce4-terminal -e "bash -c 'ls / etc; exec bash'" --tab -e "bash - c 'ls / dev; exec bash' "ถ้าคุณใช้ Gnome Terminal คุณต้องเขียน --tab ก่อนหน้าคำสั่งแรกด้วย
Rafael Cavalcanti

สิ่งนี้มีประโยชน์เล็กน้อยในขณะที่ไม่ไกลเท่าที่ฉันคาดหวัง เมื่อฉันเริ่มต้น gradle ด้วย `xfce4-terminal --working-directory = / home / stefan / oximity / med -e" gradle gradc ระเบิด bash -c 'ระเบิด explarWarSync; bash' "` แท็บถูกเปิดชื่อ แต่มันแสดงให้เห็นถึงการไล่ระดับ: ไม่พบคำสั่ง "ในขณะที่ป้อนคำสั่งจะทำงานได้ดี Git, mysql และ scala ทำงานได้ดีเช่นกัน แต่สำหรับ jboss, Ctrl-C จะยกเลิก jboss-tab ทั้งหมด ฉันสามารถเตรียมเปลือกเริ่มต้นที่นั่น - อาจสะท้อนคำสั่งเพื่อป้อน ฉันไม่เข้าใจสิ่งที่สร้างความแตกต่างที่นี่
ผู้ใช้ที่ไม่รู้จัก

1

แอพหลายรายการในxfce4-terminalแท็บ

การเพิ่มเชลล์เชิงโต้ตอบให้กับแต่ละแท็บ xfce

คุณสามารถใช้แฮ็คนี้เพื่อเพิ่มเชลล์ถ้า / เมื่อคุณCtrl+Cแท็บ:

$ xfce4-terminal -H \
     --tab -T bash -e "bash -c 'top;bash'" \
     --tab -T git  -e "bash -c 'top;bash'"

นี่จะให้สิ่งต่อไปนี้กับคุณ:

   ss ของ xfce w / แท็บ

   ss ของ xfce w / สูงสุด Ctrl + C


0

เมื่อออกจากเชลล์โดยไม่มี-Hขั้วจะถูกปิดเช่นกัน ด้วยแฟล็กนี้เทอร์มินัลจะยังคงทำงานต่อไป แต่กระบวนการเชลล์จะปิดและไม่สามารถกู้คืนได้

ฉันคิดว่าคุณกำลังพยายามที่จะเชื่อว่าคุณเพิ่งจะเริ่มต้นเทอร์มินัลของคุณและสภาพแวดล้อมการพัฒนาของคุณจะเริ่มต้นขึ้น?

คุณอาจสร้างเชลล์สคริปต์และวางคำสั่งทั้งหมดของคุณไว้ข้างใน ในตอนท้ายของสคริปต์คุณเพิ่งเริ่มเปลือกของคุณ:

#!/bin/sh

gradle &
git &
... &
.... &
jboss &

$SHELL

# some cleanup commands if needed

xfce4-terminal -e /the/scriptแล้วโทรสคริปต์นี้ผ่านทาง เมื่อออกจาก$SHELLกระบวนการผู้ปกครอง (สคริปต์ของคุณ) เสร็จแล้วและงานพื้นหลังจะได้รับสัญญาณออกและออกเช่นกัน

หากคุณต้องการรักษาชีวิตให้ใช้เช่นnohup jboss &ในสคริปต์ของคุณ


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