プログラムでgnomeターミナルを開き、bashrcの実行後にコマンドを実行します。

プログラムでgnomeターミナルを開き、bashrcの実行後にコマンドを実行します。

開発環境を起動するために、私は小さなスクリプトを書きました。1つは、いくつかのコマンドを自動的に実行するために、いくつかのタブを持つgnomeターミナルを開くことです。これらのコマンドのいくつかは、すでに実行された.bashrcに依存しています。しかし、

gnome-terminal --tab -e "コマンド" --tab --tab

コマンドは .bashrc が実行される前に実行されます。自動化された gnome-terminal -e を手動で使用したのと同じように動作させることは可能ですか? ("cd /foo/bar" のようなコマンドも gnome-terminal -e では動作しません)

答え1

gnome-terminal が bash を起動すると、コマンド実行に関してはループから外れ、入力と出力のみを管理します。そのため、~/.bashrcロードされた後に何かを実行するには bash の協力が必要になります。

まず、多くの場合、 の後に実際にコマンドを実行する必要はありません~/.bashrc。たとえば、特定のディレクトリでターミナルを開くには、 を使用するだけですcd /foo/bar && gnome-terminal。同様の方法で環境変数を設定できますVAR=value gnome-terminal。( が~/.bashrc環境変数を上書きする場合は、やり方が間違っています。環境変数の定義は~/.profile

ターミナルでコマンドを実行するには~/.bashrc

gnome-terminal -x sh -c 'command1; command2; exec bash'

-e複数のタブを使用する場合は、の代わりにを使用する必要があります-x。gnome-terminal は、 の引数-eをシェルで実行するのではなく、スペースで分割します。それでも、スペースを含めないようにすれば、シェル コマンドを記述できます。ただし、少なくとも gnome-terminal 2.26 では、タブを使用できます (<TAB>リテラルのタブ文字に置き換えます)。

gnome-terminal -e 'sh -c command1;command2;exec<TAB>bash'
gnome-terminal --tab -e 'sh -c command1;<TAB>exec<TAB>bash' \
               --tab -e 'sh -c command2;<TAB>exec<TAB>bash'

後でコマンドを実行する必要がある場合は、~/.bashrc, make それコマンドを実行します。たとえば、の最後に次のコードを含めます~/.bashrc

eval "$BASH_POST_RC"

次に、bashrc の後に (実際には最後に) コードを実行します。

gnome-terminal -x sh -c BASH_POST_RC=\''command1; command2'\''; exec bash'

または(引用は控える)

BASH_POST_RC='command1; command2' gnome-terminal

この方法を特にお勧めするわけではありませんが、 コマンドラインに特定のテキストが既に入力されている状態でターミナルを起動するにはどうすればよいですか?

答え2

-eオプションを使用すると、gnome-terminal新しいシェルを起動せずにコマンドが実行されます ( のようなものも実行できますgnome-terminal -e gedit)。そのため、新しいターミナル/タブでシェルにコマンドを実行する場合は、bash次のようにする必要があります。

gnome-terminal -x bash -c "command"

ただし、"command"終了するとターミナル/タブも終了することに注意してください。

関連情報