シェルが開いた後にターミナル ウィンドウを開いてコマンドを実行するにはどうすればよいですか?

シェルが開いた後にターミナル ウィンドウを開いてコマンドを実行するにはどうすればよいですか?

コマンドやスクリプトが欲しいのですがbashで新しいgnome-terminalウィンドウを開き、履歴ファイルをロードして開いたままにします。

ターミナルを開いて閉じずにコマンドを実行する方法を検索しましたが、私が見つけた答えは基本的に次のとおりです。このスタックオーバーフローの回答

これらの方法に基づいて、次のコマンドを実行してみました。

gnome-terminal -e "bash -c 'history -r ~/history.txt; exec $SHELL'"

ただし、新しいウィンドウに表示される履歴は、 の履歴ではなくhistory.txt、デフォルト ファイル の履歴です。を実行しているコマンドの後、そのファイルがソースになっているため、読み込んだ履歴に影響を与える何かが行われているのではないかと.bash_history考えました。history -rbash.bashrc.bashrc

これを踏まえて、rcfile上記の回答のオプションを試してみました。これにより、 の後にコマンドを含めることができるようになり.bashrc、次のようになりましたrcfile

FILE=~/.bashrc && test -f $FILE && source $FILE
history -c && history -r ~/history.txt

ただし、次のコマンドを実行すると:

gnome-terminal -e "bash --rcfile rcfile"

新しいターミナルの履歴は からのものです。にコマンド.bash_historyを追加すると、からの履歴が読み込まれたことが表示されます。historyrcfilehistory.txt何かがrcfile履歴を上書きしてロードする

また、私がHISTFILE変数を設定解除するexport HISTFILE=''の末尾にrcfile履歴はhistory.txt上書きされません動作します。ただし、新しく開いたターミナルを使用するときHISTFILEに履歴を保存したいので、設定を解除したくありません。.bash_history

最終的に、-obash でオプションを見つけたので、それを使ってやりたいことをやってみました。次rcfileのように変更しました:

FILE=~/.bashrc && test -f $FILE && source $FILE
history -c && history -r ~/saved/history.txt
set -o history

次のコマンドを実行しました:

bash --rcfile rcfile.txt +o history

bashを実行することで の+o history履歴がhistory.txt上書きされるのを防ぎ、set -o historyのコマンドでbash の履歴が再アクティブ化されることを期待していましたrcfile。しかし、これも意図したとおりには機能しません。履歴は のものですが、history.txt履歴のログ記録がなくなり、set -o history機能させるには手動で入力する必要があります。

つまり、基本的に、私が試したことはすべて同じ疑問につながります。bashで新しいターミナルを開くにはどうすればいいですか?それからコマンドを実行するまるでユーザーが入力しているかのようですね?

さらに、私は以下についてより深く理解したい。rcfileが実行された後に何が起こるか他に関連のあるファイルは見つからなかったため、コマンドラインからその動作を無効にする方法はありますか??

答え1

質問に記載されているPROMPT_COMMAND変数とファイルを使用して回避策を見つけることができました。次のコマンドを実行できます。rcfile.txt

gnome-terminal -e "bash --rcfile rcfile.txt"

の内容はrcfile.txt次のとおりです。

FILE=~/.bashrc && test -f $FILE && source $FILE

my_init_func() {
    # Insert desired commands here. In my case, history -r history.txt
    PROMPT_COMMAND=`echo $1`
    eval $PROMPT_COMMAND
    unset -f $FUNCNAME
}

PROMPT_COMMAND="my_init_func \'$PROMPT_COMMAND\'"

.bashrcこれは、他の端末構成を維持するために、存在する場合はデフォルトをソースします。次に、 PROMPT_COMMANDbash で使用される を呼び出すときに 1 回実行され、その後、自分自身を設定解除して元の を復元する関数を定義しますPROMPT_COMMAND

関連情報