
コマンドやスクリプトが欲しいのですがbashで新しいgnome-terminalウィンドウを開き、履歴ファイルをロードして開いたままにします。。
ターミナルを開いて閉じずにコマンドを実行する方法を検索しましたが、私が見つけた答えは基本的に次のとおりです。このスタックオーバーフローの回答。
これらの方法に基づいて、次のコマンドを実行してみました。
gnome-terminal -e "bash -c 'history -r ~/history.txt; exec $SHELL'"
ただし、新しいウィンドウに表示される履歴は、 の履歴ではなくhistory.txt
、デフォルト ファイル の履歴です。を実行しているコマンドの後、そのファイルがソースになっているため、読み込んだ履歴に影響を与える何かが行われているのではないかと.bash_history
考えました。history -r
bash
.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
を追加すると、からの履歴が読み込まれたことが表示されます。history
rcfile
history.txt
何かがrcfile
履歴を上書きしてロードする。
また、私がHISTFILE
変数を設定解除するexport HISTFILE=''
の末尾にrcfile
、履歴はhistory.txt
上書きされません動作します。ただし、新しく開いたターミナルを使用するときHISTFILE
に履歴を保存したいので、設定を解除したくありません。.bash_history
最終的に、-o
bash でオプションを見つけたので、それを使ってやりたいことをやってみました。次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_COMMAND
bash で使用される を呼び出すときに 1 回実行され、その後、自分自身を設定解除して元の を復元する関数を定義しますPROMPT_COMMAND
。