開発環境を起動するために、私は小さなスクリプトを書きました。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"
終了するとターミナル/タブも終了することに注意してください。