เปิดแท็บใหม่ใน gnome-terminal โดยใช้ command line [closed]


122

ฉันใช้ Ubuntu 9.04 x64 และเมื่อฉันเขียน:

gnome-terminal --tab

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

ฉันพบว่าความตั้งใจของมันคือการเปิดแท็บใหม่ในหน้าต่างใหม่นั่นคือถ้าฉันเขียน:

gnome-terminal --tab --tab

จะเปิดหน้าต่างใหม่พร้อมสองแท็บ

ดังนั้นคำถามคือฉันจะเปิดแท็บใหม่ในหน้าต่างปัจจุบันโดยใช้คำสั่งในได้gnome-terminalอย่างไร?


4
ถ้าคุณกำลังเขียน gnome-terminal อยู่แล้วทำไมคุณไม่สามารถกด ctrl + shift + t เพื่อเปิดแท็บใหม่ได้;)
rasjani

13
และฉันควรจะกดอย่างไรCtrl+Shift+Tเมื่อคำสั่งถูกเรียกใช้จากไฟล์สคริปต์? (ได้ยินชื่อ D-Bus ก็ทำได้)!
Vikrant Chaudhary

19
เมื่อใดก็ตามที่ฉันเริ่มพีซีฉันต้องเปิดแท็บสองสามแท็บใน gnome-terminal และระบบอัตโนมัติที่จะทำให้ฉันรู้สึกว่าตัวเองเกินบรรยาย (ตามที่พวกเขากล่าว) ความเกียจคร้านเป็นคุณสมบัติของโปรแกรมเมอร์
Vikrant Chaudhary

@VikrantChaudhary threevirtues.com :-)
jpaugh

Stack Overflow เป็นไซต์สำหรับคำถามเกี่ยวกับการเขียนโปรแกรมและการพัฒนา คำถามนี้ดูเหมือนจะไม่ตรงประเด็นเนื่องจากไม่เกี่ยวกับการเขียนโปรแกรมหรือการพัฒนา ดูหัวข้อที่ฉันสามารถถามได้ที่นี่ในศูนย์ช่วยเหลือ บางทีSuper UserหรือUnix & Linux Stack Exchangeอาจเป็นสถานที่ที่ดีกว่าที่จะถาม
jww

คำตอบ:


70
#!/bin/sh

WID=$(xprop -root | grep "_NET_ACTIVE_WINDOW(WINDOW)"| awk '{print $5}')
xdotool windowfocus $WID
xdotool key ctrl+shift+t
wmctrl -i -a $WID

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


3
ขอบคุณทำงานได้ดี ในรูปแบบที่เหมาะสม -WID= xprop -root | grep "_NET_ACTIVE_WINDOW(WINDOW)"| awk '{print $5}'; xdotool windowfocus $WID; xdotool key ctrl+shift+t $WID
Vikrant Chaudhary

6
ขอบคุณสำหรับการแก้ปัญหา แม้ว่าจะไม่ชัดเจนสำหรับฉันว่าฉันจะเรียกใช้คำสั่งต่างๆในแท็บต่างๆได้อย่างไร ไม่ว่าฉันจะเพิ่มคำสั่งที่ใดคำสั่งทั้งหมดก็จะถูกดำเนินการในแท็บแรก คุณสามารถรวมวิธีแก้ปัญหานี้ได้หรือไม่?
Calin

10
@Calin ใช้sleep 1; xdotool type --delay 1 --clearmodifiers "your Command"; xdotool key Return;เพื่อเรียกใช้คำสั่ง
user13107

2
ทำไมต้องเป็น WID และ windowfocus bit? หน้าต่างจะไม่ถูกโฟกัสแล้วหรือ?
Chris Morgan

1
ฉันจะวางสคริปต์นี้ไว้ที่ไหน
Dawoodjee

69

คุณยังสามารถให้แต่ละแท็บรันคำสั่ง set

gnome-terminal --tab -e "tail -f somefile" --tab -e "some_other_command"

11
ฉันได้รับ 'มีข้อผิดพลาดในการสร้างกระบวนการย่อยสำหรับเทอร์มินัลนี้' เพื่อตอบสนองgnome-terminal --tab -e "cd /tmp"
Hedgehog

3
@Hedgehog ฉันมีวิธีสำหรับสิ่งนั้น: gnome-terminal --tab --working-directory="/home/user/X/Y/". ฉันไม่ได้ทำไม แต่"~/X/Y/"ไม่ได้ผล
แสงจ้า

1
ฉันมีปัญหากับคำสั่งของฉันถ้าฉันใช้แค่ --tab มันก็ใช้ได้ แต่ถ้าฉันใช้ --tab -e "my_bash_shorcut" มันจะไม่ได้ผล คุณรู้ไหมว่าทำไม?
Adrian Matteo

@AdrianMatteo ช้าไปหน่อย แต่ฉันคิดว่าฉันคิดออกแล้ว: ถ้าคุณสร้างไฟล์สองไฟล์ด้วยคำพูดพล่อยๆแล้วเรียกใช้คำสั่งนี้gnome-terminal --tab -e "tail -f file_a" --tab -e "tail -f file_b"เทอร์มินัล gnome จะเปิดขึ้นพร้อมสองแท็บซึ่งแต่ละแท็บจะมีเนื้อหาไฟล์ตามลำดับ แต่จะปิด เดี๋ยวส่ง ^ C. นี่แสดงให้คุณเห็นว่าเหตุใดจึงไม่ได้ผล แต่ฉันไม่รู้วิธีแก้ไข
IDDQD


8

ฉันพบวิธีที่ง่ายที่สุด:

gnome-terminal --tab -e 'command 1' --tab -e 'command 2'

ฉันใช้tmuxแทนการใช้เทอร์มินัลโดยตรง ดังนั้นสิ่งที่ฉันต้องการคือไฟล์คำสั่ง / เชลล์เพียงไฟล์เดียวที่เรียบง่ายเพื่อสร้างการพัฒนาenvโดยใช้หลายtmuxหน้าต่าง รหัสเชลล์มีดังต่อไปนี้:

#!/bin/bash
tabs="adb ana repo"
gen_params() {

    local params=""
    for tab in ${tabs}
    do  
        params="${params} --tab -e 'tmux -u attach-session -t ${tab}'"
    done
    echo "${params}"
}
cmd="gnome-terminal $(gen_params)"
eval $cmd

คำพูดเหล่านี้'command 1'ใช้ได้ผลดีกว่าเครื่องหมายคำพูดคู่ซึ่งใช้ได้ผลกับฉันเมื่อฉันระบุเท่านั้น--working-directory="/some/path/"
Barry Staes

4

รุ่นที่ซับซ้อนขึ้นเล็กน้อย (เพื่อใช้จากหน้าต่างอื่น):

#!/bin/bash

DELAY=3

TERM_PID=$(echo `ps -C gnome-terminal -o pid= | head -1`) # get first gnome-terminal's PID
WID=$(wmctrl -lp | awk -v pid=$TERM_PID '$3==pid{print $1;exit;}') # get window id

xdotool windowfocus $WID
xdotool key alt+t # my key map
xdotool sleep $DELAY # it may take a while to start new shell :(
xdotool type --delay 1 --clearmodifiers "$@"
xdotool key Return

wmctrl -i -a $WID # go to that window (WID is numeric)

# vim:ai
# EOF #

2

ในกรณีที่คุณต้องการเปิด

  • หน้าต่างใหม่
  • มีสองแท็บ
  • และดำเนินการคำสั่งในนั้น
  • และให้พวกเขาอยู่อย่างเปิดเผย ...

ไปเลย:

gnome-terminal --geometry=73x16+0+0 --window \
  --working-directory=/depot --title='A' --command="bash -c ls;bash" \
  --tab --working-directory=/depot/kn --title='B' --command="bash -c ls;bash"

(เหมือนกันสำหรับmate-terminalbtw)


ทำงานเหมือนกันสำหรับxfce4-terminalbtw คำสั่งใดต่อไปนี้รับผิดชอบต่อประเด็นนี้ and having them stay open...จริงๆ เอี่ยมถามเพราะไม่ได้กล่าวถึงใน manpage อย่างน้อยสำหรับxfce4-terminal
Jankapunkt

1

ในการรวบรวมประเด็นต่างๆข้างต้นนี่คือสคริปต์ที่จะเรียกใช้อาร์กิวเมนต์ที่ส่งไปยังสคริปต์vim new_tab.sh:

#!/bin/bash
#
# Dependencies:
#   sudo apt install xdotool

WID=$(xprop -root | grep "_NET_ACTIVE_WINDOW(WINDOW)"| awk '{print $5}')
xdotool windowfocus $WID
xdotool key ctrl+shift+t
wmctrl -i -a $WID
sleep 1; xdotool type --delay 1 --clearmodifiers "$@"; xdotool key Return;

ถัดไปทำให้สามารถใช้งานได้: chmod +x new_tab.sh

ตอนนี้คุณสามารถใช้มันเพื่อเรียกใช้สิ่งที่คุณต้องการในแท็บใหม่: ./new_tab.sh "watch ls -l"


0

ฉันไม่ได้มีคำพังเพยขั้วติดตั้ง แต่คุณควรจะสามารถที่จะทำเช่นนี้โดยใช้การเรียก DBUS บนบรรทัดคำสั่งโดยใช้dbus-ส่ง



0

สำหรับใครที่กำลังมองหาวิธีแก้ปัญหาที่ไม่ใช้ command line: ctrl + shift + t


10
พวกเขากำลังถามบรรทัดคำสั่งเพื่อทำให้สิ่งต่างๆเป็นไปโดยอัตโนมัติ ทางลัดเหล่านี้แทบจะไม่ช่วยอะไร
Muthu Ganapathy Nathan

นั่นคือสิ่งที่ฉันกำลังมองหา คำถามในชื่อเรื่องไม่ได้ จำกัด เฉพาะ 'โซลูชันอัตโนมัติ' @EAGER_STUDENT และพูดตามตรงฉันพบว่ามันยากที่จะหากรณีการใช้งานที่ฉันต้องการ GUI อัตโนมัติ นั่นเหมือนกับการผ่าตัดหัวใจแบบเปิดผ่านกระดูกสันหลัง
Steffen Winkler

6
@SteffenWinkler ฉันดีใจที่โซลูชันช่วยคุณได้ แต่เนื่องจากคำถามกล่าวว่า 'ใช้บรรทัดคำสั่ง' ฉันจึงสันนิษฐานว่าจะใช้คำสั่งอัตโนมัติบางอย่างเช่นคำตอบที่ได้รับการโหวตสูง ... อย่างไรก็ตามคำตอบนั้นชัดเจนว่า 'สำหรับใครก็ตามที่กำลังมองหาวิธีแก้ปัญหาที่ไม่ใช้บรรทัดคำสั่ง' .... ความรุ่งโรจน์ในคำตอบ .... ยิ่งไปกว่านั้น 'ฉันพบว่ามันยากที่จะสร้างกรณีการใช้งานที่ฉันต้องการ GUI อัตโนมัติฉันต้องเปิดแท็บ 5 แท็บเมื่อเริ่มต้นใช้งานเสมอ ในกรณีนี้มันจะมีประโยชน์ แต่ในกรณีนั้นเราก็สามารถใช้ทางลัดเพื่อทำให้เป็นอัตโนมัติได้เช่นกัน)
Muthu Ganapathy Nathan

2
ตัวอย่างที่ฉันต้องการเปิดแท็บอัตโนมัติ ฉันกำลังใช้สคริปต์เริ่มต้นอัตโนมัติบนหุ่นยนต์และฉันต้องการเปิดแท็บเพื่อเรียกใช้คำสั่งดังนั้นเมื่อกระบวนการหยุดทำงาน (อย่างที่ทุกคนทำในที่สุด) ฉันสามารถ ssh จากแล็ปท็อปของฉันและดูผลลัพธ์บันทึกบนคอนโซลได้ โดยไม่ต้องขุดผ่านไดเร็กทอรีล็อกไฟล์
WillC

-2

สำหรับการเปิดหลายแท็บในหน้าต่างเทอร์มินัลเดียวกันคุณสามารถใช้วิธีแก้ปัญหาต่อไปนี้

ตัวอย่างสคริปต์:

pwd='/Users/pallavi/Documents/containers/platform241/etisalatwallet/api-server-tomcat-7/bin'
pwdlog='/Users/pallavi/Documents/containers/platform241/etisalatwallet/api-server-tomcat-7/logs'
pwd1='/Users/pallavi/Documents/containers/platform241/etisalatwallet/core-server-jboss-7.2/bin'
logpwd1='/Users/pallavi/Documents/containers/platform241/etisalatwallet/core-server-jboss-7.2/standalone/log'

osascript -e "tell application \"Terminal\"" \

-e "tell application \"System Events\" to keystroke \"t\" using {command down}" \
-e "do script \"cd $pwd\" in front window" \
-e "do script \"./startup.sh\" in front window" \
-e "tell application \"System Events\" to keystroke \"t\" using {command down}" \
-e "do script \"cd $pwdlog\" in front window" \
-e "do script \"tail -f catalina.out \" in front window" \
-e "tell application \"System Events\" to keystroke \"t\" using {command down}" \
-e "do script \"cd $pwd1\" in front window" \
-e "do script \"./standalone.sh\" in front window" \
-e "tell application \"System Events\" to keystroke \"t\" using {command down}" \
-e "do script \"cd $logpwd1\" in front window" \
-e "do script \"tail -f core.log \" in front window" \
-e "end tell"
> /dev/null 

1
ดูเหมือนว่านี่เป็นคำตอบที่เป็นศูนย์กลางของ OSX เมื่อคำถามนั้นชัดเจนเกี่ยวกับเทอร์มินัล (gnome) ใน linux osascriptis OSX (Apple)
เมื่อ

@nhed: ขอบคุณ - ที่ตอบฉันว่าบนโลกนี้คืออะไร ?? ตอบกลับคำตอบนี้ Pallavi: แม้ว่าคำถามจะเกี่ยวกับ Mac แต่การเข้ารหัสเส้นทางกลับบ้านของคุณเองไม่ได้ทำให้คำตอบของคุณมีประโยชน์มากนัก ฉันขอแนะนำให้คุณใช้$HOMEตัวแปรสภาพแวดล้อมหรือเทียบเท่ากับ OSX หากแตกต่างกัน
Michael Scheper
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.