명령 줄을 사용하여 gnome-terminal에서 새 탭 열기 [닫힘]


122

Ubuntu 9.04 x64를 사용하고 있으며 다음과 같이 작성합니다.

gnome-terminal --tab

터미널에서 동일한 터미널 창에서 새 탭을 열 것으로 예상합니다. 그러나 대신 새 창이 열립니다.

나는 그 의도가 새 창에서 새 탭을 여는 것임을 알았습니다.

gnome-terminal --tab --tab

두 개의 탭이있는 새 창이 열립니다.

따라서 질문은 의 명령을 사용하여 현재 창 에서 새 탭을 어떻게 열 수 gnome-terminal있습니까?


4
당신은 그놈 터미널 어쨌든을 작성하는 경우 왜 캔트 방금 Ctrl 키를 + 이동 + 새 탭을 열어 t)
rasjani

13
그리고 Ctrl+Shift+T스크립트 파일에서 명령이 실행될 때 어떻게 눌러야 합니까? (D-Bus라고 불리는 것이 그렇게 할 수 있다고 들었습니다)!
Vikrant Chaudhary

19
PC를 시작할 때마다 그놈 터미널에서 몇 개의 탭을 열어야합니다. 그리고 자동화 하면 나를 좀 더 괴짜로 느낄 것입니다. (그들이 말하는 것처럼) 게으름은 프로그래머의 기능입니다.
Vikrant Chaudhary

@VikrantChaudhary threevirtues.com :-)
jpaugh

Stack Overflow는 프로그래밍 및 개발 질문을위한 사이트입니다. 이 질문은 프로그래밍이나 개발에 관한 것이 아니기 때문에 주제에서 벗어난 것처럼 보입니다. 도움말 센터에서 내가 질문 할 수있는 주제를 참조 하세요 . 아마 슈퍼 사용자 또는 유닉스 및 리눅스 스택 교환 물어 더 나은 장소가 될 것입니다.
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 및 창 초점 비트가 필요한 이유는 무엇입니까? 창에 이미 초점이 맞춰져 있지 않습니까?
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/"작동하지 않았습니다.
glarrain

1
내 명령에 문제가 있습니다. --tab 만 사용하면 작동하지만 --tab -e "my_bash_shorcut"을 사용하면 작동하지 않습니다. 그 이유를 아십니까?
Adrian Matteo

@AdrianMatteo 조금 늦었지만 나는 그것을 알아 냈다고 생각합니다. 무의미한 말로 두 개의 파일을 만든 다음이 명령을 실행 gnome-terminal --tab -e "tail -f file_a" --tab -e "tail -f file_b"하면 그놈 터미널이 두 개의 탭으로 열리고 각 탭에는 각 파일 내용이 있지만 닫힙니다. ^ C를 보내는 순간. 이것은 그것이 작동하지 않는 이유를 보여 주지만 이것을 해결하는 방법을 모릅니다.
IDDQD 2013


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/"
배리 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...무엇입니까? 이것이 맨 페이지에 적어도 언급되지 않았기 때문에 xfce4-terminal
나는 묻습니다

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

gnome-terminal이 설치되어 있지 않지만 dbus-send를 사용하여 명령 줄에서 DBUS 호출을 사용하여이를 수행 할 수 있습니다 .


0

대신 Roxterm을 사용해보십시오.

roxterm --tab

현재 창에서 탭을 엽니 다.


0

명령 줄을 사용하지 않는 솔루션을 찾는 사람 : ctrl + shift + t


10
그들은 일을 자동화하기 위해 명령 줄.을 요청하고 있습니다. 이러한 단축키는 거의 도움이되지 않습니다.
Muthu Ganapathy Nathan

내가 찾던 바로 그 것이었다. 제목의 질문은 '자동화 된 솔루션'@EAGER_STUDENT에 국한되지 않으며 솔직히 GUI 자동화가 필요한 사용 사례를 찾기가 어렵습니다. 그것은 척추를 통해 열린 심장 수술을하는 것과 같습니다.
Steffen Winkler 2014

6
@SteffenWinkler 솔루션이 도움이되어 기쁩니다. 그러나 질문이 '명령 줄 사용'이라고했기 때문에 나는 일부 자동화 된 명령을 사용하는 것으로 가정했습니다. 투표율이 높은 답변과 같은 ... 어쨌든 답변 자체는 '명령 줄을 사용하지 않는 솔루션을 찾는 사람을 위해'를 명확히합니다 .... 대답에 대한 찬사 .... 또한 '자동화 된 GUI가 필요한 사용 사례를 찾기가 어렵다'고 말하면 시작시 항상 5 개의 탭을 열어야합니다. 이 경우 유용합니다. 그러나이 경우도 우리는 어쨌든 자동화하는 데 바로 가기를 사용할 수 있습니다)
Muthu Ganapathy 나단

2
자동화 된 탭 열기가 필요한 예 저는 로봇에서 시작 스크립트를 자동화하고 있으며, 프로세스가 충돌 할 때 (결국 모두 그렇듯이) 명령을 실행하기 위해 탭을 열고 싶습니다. 랩톱에서 ssh를 사용하여 콘솔에서 로그 출력을 볼 수 있습니다. 로그 파일 디렉토리를 파헤 치지 않고.
WillC 2017

-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 중심의 대답처럼 들립니다. osascriptis OSX (Apple)
nhed 2017-06-09

@nhed : 감사합니다. 그게도대체 뭐라고 대답합니까 ?? 이 답변에 대한 응답. Pallavi : 질문이 Mac에 관한 것이더라도 집 경로를 하드 코딩한다고해서 답이별로 도움이되지는 않습니다. $HOME환경 변수 를 사용 하거나 다른 경우 OSX와 동등한 것을 사용하는 것이 좋습니다 .
Michael Scheper
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.