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

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

コマンドやスクリプトが欲しいBashを使用して新しいgnomeターミナルウィンドウを開き、履歴ファイルをロードしてから開きます。

端末を閉じずに端末を開き、コマンドを実行する方法を検索しましたが、見つかった答えは基本的に次のようになります。このstackoverflowの答え

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

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_historyhistoryコマンドを追加すると、履歴がロードされたとマークされますrcfilehistory.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

私はbashwithを実行すると+o history履歴をhistory.txt上書きするのを防ぎ、set -o historyコマンドを実行するとrcfilebash履歴が再び有効になることを望みました。ただし、これも期待どおりに機能しません。なぜなら、記録がオリジナルだからです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これは、他の端末設定が維持されるようにデフォルト値(存在する場合)を取得することです。次に、bashで使用される関数が呼び出されたときに一度実行される関数を定義してから、独自の設定を解除してPROMPT_COMMANDソースを復元しますPROMPT_COMMAND

おすすめ記事