コマンドラインを使用してgnome-terminalで新しいタブを開きます[終了]


122

私はUbuntu 9.04 x64を使用しています。

gnome-terminal --tab

端末では、同じ端末ウィンドウで新しいタブを開くことを期待しています。ただし、代わりに新しいウィンドウが開きます。

その意図は、新しいウィンドウで新しいタブを開くことです。つまり、次のように記述した場合、

gnome-terminal --tab --tab

2つのタブを持つ新しいウィンドウが開きます。

だから、問題は、どのようにしてコマンドを使用して現在のウィンドウで新しいタブを開くことができるのgnome-terminalですか?


4
とにかくgnome-terminalを書いているのなら、なぜctrl + shift + tを押して新しいタブを開くことができないのですか;)
rasjani 2009

13
またCtrl+Shift+T、コマンドがスクリプトファイルから実行されているときに、どのように押しますか。(D-Busと呼ばれる何かがそれを行うことができると聞いた)!
Vikrant Chaudhary、

19
PCを起動するたびに、gnome-terminalでいくつかのタブを開く必要があります。そして、それを自動化することで、私は少しマニアックな気分になります。(彼らが言うように)怠惰はプログラマーの機能です。
Vikrant Chaudhary、

@VikrantChaudhary threevirtues.com :-)
jpaugh

Stack Overflowは、プログラミングと開発に関する質問のためのサイトです。この質問はプログラミングや開発に関するものではないため、トピックから外れているようです。ヘルプセンターのここ質問できるトピックを参照してください。おそらく、スーパーユーザーまたは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
解決策をありがとう。ただし、さまざまなタブでさまざまなコマンドを実行する方法は明確ではありません。コマンドをどこに追加しても、最初のタブですべて実行されます。これに対する解決策を含めることができますか?
カリン

10
@Calin sleep 1; xdotool type --delay 1 --clearmodifiers "your Command"; xdotool key Return;はコマンドを実行するために使用します。
user13107 2012年

2
なぜWIDとwindowfocusビットなのですか?ウィンドウはすでにフォーカスされていませんか?
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"
ヘッジホッグ

3
@Hedgehog、私はそのための方法を持っています:gnome-terminal --tab --working-directory="/home/user/X/Y/"。理由はわかりませんが、"~/X/Y/"うまくいきませんでした。
glarrain

1
--tabだけを使用すると機能しますが、-tab -e "my_bash_shorcut"を使用すると機能しません。なぜなのかご存知ですか?
Adrian Matteo

@AdrianMatteo少し遅れましたが、私はそれを理解したと思います:意味不明な2つのファイルを作成してからこのコマンドを実行するgnome-terminal --tab -e "tail -f file_a" --tab -e "tail -f file_b"と、gnomeターミナルは2つのタブで開き、各タブにはそれぞれのファイルの内容が含まれますが、 ^ Cを送信した瞬間。これはなぜ機能しないのかを示していますが、これを修正する方法がわかりません。
IDDQD 2013

@AdrianMatteo参照くださいstackoverflow.com/questions/17402152/...
クラウス

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

念のため、開きたい

  • 新しいウィンドウ
  • 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-terminalところで同じです。)


xfce4-terminalところで、同じように動作します。これらのコマンドのどれが実際にポイントの原因 and having them stay open...ですか?これはマンページで少なくとも言及されていないため、Iamに質問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

私はgnome-terminalをインストールしていませんが、dbus-sendを使用してコマンドラインでDBUS呼び出しを使用することでこれを実行できるはずです。


0

代わりにRoxtermの使用を検討してください。

roxterm --tab

現在のウィンドウでタブを開きます。


0

コマンドラインを使用しないソリューションを探している人のために:ctrl + shift + t


10
彼らは物事を自動化するためにコマンドラインを求めています。これらのショートカットはほとんど役に立ちません。
Muthu Ganapathy Nathan 2013

それがまさに私が探していたものでした。タイトルの質問は「自動化されたソリューション」@EAGER_STUDENTに限定されていません。正直なところ、GUIを自動化する必要があるユースケースを思い付くのは難しいと思います。それは、脊椎を通して開心術を行うようなものです。
Steffen Winkler 2014

6
@SteffenWinkler解決策があなたを助けてくれてうれしいです。しかし、質問は「コマンドラインを使用して」と言ったので、投票数の多い回答など、いくつかの自動化コマンドを使用することを想定しました...とにかく、回答自体が「コマンドラインを使用しないソリューションを求める人のために」を明確にします。答えに対する称賛....さらに、「GUIを自動化する必要があるユースケースを思い付くのは難しいと思います。たとえば、起動時に常に5つのタブを開く必要があるとしましょう。その場合、それは役に立ちます。しかしその場合も、とにかく自動化するためにショートカットを使用できます;)
Muthu Ganapathy Nathan

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
Linuxの(gnome)端末に関する質問が明確である場合、このように聞こえるのはOSX中心の回答です。 osascriptis OSX(Apple)
2017年

@nhed:ありがとうございます。これで私の答えは一体何ですか?この答えへの応答。Pallavi:Macに関する質問だったとしても、自分のホームパスをハードコーディングしても、回答はそれほど役に立ちません。$HOME環境変数を使用することをお勧めします。環境変数が異なる場合は、同等のOSX を使用することをお勧めします。
Michael Scheper
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.