複数のタブとさまざまなコマンドを使用して新しいgnome端末(v3.28+)を開きます。

複数のタブとさまざまなコマンドを使用して新しいgnome端末(v3.28+)を開きます。

Ubuntu 14(v3.6?)とUbuntu 18(v3.28)に同梱されているバージョン間でgnome-terminalの動作に変化があるようです。

開発用に複数のディレクトリに設定された複数のタブを持つ新しいGNOME端末を開くスクリプトがあり、現在最初のタブがスクリプトを実行しています。タブを使用してGNOME端末を開くコマンドは次のとおりです。

gnome-terminal \
   --tab --command="myscript.sh" \
   --tab --working-directory="<some dir 1>" \
   --tab --working-directory="<some dir 2>" \
   ...

これは、Ubuntu 14(v3.6?)に付属のgnome-terminalバージョンで完全に機能します。

ただし、Ubuntu 18(v3.28)に付属のgnomeターミナルバージョンでは、いくつかの点が変更されました。

  1. そのオプションを追加しないと、--windowタブは新しい端末ではなく現在のgnome端末で開きます。残念ながら、この--windowオプションを追加すると、最初は空のタブが開きます。私が指定したタブだけで新しいウィンドウを開くことはできますか?
  2. 次の通知を受け取ります(以前と同じように機能しますが)。

    # Option “--command” is deprecated and might be removed in a later version of gnome-terminal.
    # Use “-- ” to terminate the options and put the command line to execute after it.
    

    このガイドに従うようにスクリプトを変更すると、コマンドがすべてのタブに送信されるように動作が変更されました。以前は、各タブに独自のコマンドを適用できました。これは、タブごとに別々のコマンドを実行する機能が使用されなくなったことを意味しますか、それとも何かが欠けていますか?

最新のGNOME端末で以前の動作をサポートするようにスクリプトを変更する方法について提案していただきありがとうございます。

答え1

これで複数のタブが開きます。各タブを別々の行に配置する方がよりきれいになると思います。各ウィンドウに新しいウィンドウが必要な場合は省略してください。--tab

---eover/との最大の違いは、--commandパラメータに引用符がないことを参照してください

gnome-terminal --title "Frontend Web App" --tab --working-directory ~/projects/front-end-app -- npm run serve
gnome-terminal --title "API Server" --tab --working-directory ~/projects/api-server -- ./run-local.sh

答え2

gnome-terminalが使用されなくなったことは少し不幸です-e。これにより、異なるコマンドで実行される複数のタブのインスタンスを起動するのが難しくなります。これが私のアプローチです。

launch_project_fooパスのどこかに実行可能なスクリプトを作成しました。一般的なプロジェクト起動ファイルは次のとおりです。

#!/bin/bash

BASE_DIR=~/git/ProjectFooBaseDir

cat << EOF > /tmp/bootstrap_tabs.sh
gnome-terminal --tab -t "Docker" --working-directory="$BASE_DIR/backend" -- \
  zsh -is eval "docker-compose up"
gnome-terminal --tab -t "Backend" --working-directory="$BASE_DIR/backend" -- \
  zsh -is eval "npm start"
gnome-terminal --tab -t "Frontend" --working-directory="$BASE_DIR/frontend" -- \
  zsh -is eval "npm start"
gnome-terminal --tab -t "Git" --working-directory="$BASE_DIR"
EOF

gnome-terminal --window --maximize -- bash /tmp/bootstrap_tabs.sh

重要な注意:これ評価フック.zshrc、以下で説明されるように。

いくつかの注意:

  • デフォルトgnome-terminalの呼び出しは実際に起動用の「ゼロ」タブを生成しますが、すぐに閉じるため、実際には観察できません。ブートスクリプトにスリープを入れると、どういう意味なのかがわかります。

  • 変数の置換を許可するには、heredocを引用しないでください'EOF'Bashで区切られた文書で変数を使用する

  • 最後のタブは、一般タスク用の一般端末を作成します。

  • 他のタブはプロセスを直接開始しません。これは、プロセスが終了するとタブが消えるためです。この問題に対する解決策は、ややシェルによって異なります。ここではzshを使用しており、.zshrcevalフックを避け、単にegを使用できますzsh -ic "<commands>; zsh -i"。ただし、これはコマンドが終了するとCTRL + C(たとえば、無限に実行されるコマンドに一般的ですnpm start)、シェルインスタンスが終了するため、タブ全体が閉じられるという欠点があります。 evalフックを使用するアプローチはこれを防ぎ、SIGTERMの場合でもタブを開いたままにします。

  • コマンドはよくリンクされており、実際にはsleep 10; npm start;他のタブ(docker-composeなど)のエントリが準備されるのを待つためにこのコマンドを頻繁に使用します。

答え3

私は同じ問題があり、多くの試みの最後に次の解決策を見つけました。

gnome-terminal -- bash -c "myCommand -some-args; bash"
gnome-terminal -- bash -c "myOtherCommand -some-args; bash"

答え4

IMHOの最良の方法は、GNOME端末を忘れることです。代わりに、タブ名やその他の機能を維持する古いgnome端末のレプリカであるmate端末をインストールしてください。
ここにそれぞれ1つずつ3つの名前付きタブを生成する起動スクリプトがあります。どちらも見つけることができます。別のディレクトリに...

#!/bin/bash
mate-terminal \
--hide-menubar \
--geometry=130x12+1+800 \
--tab -t "vpn" \
    --tab -t "home" \
    --tab --working-directory="/ddr/buppo/bw/bw-b/sn" -t "sn"

関連情報