端末が開いている間に実行されたコマンドは履歴に表示されません。

端末が開いている間に実行されたコマンドは履歴に表示されません。

terminal.sh次の簡単なスクリプトがあります。

#bin/bash --login
str=(--tab --title="Test" -e "bash --login -c 'echo history';bash")
gnome-terminal "${str[@]}"
exit 0

私は基本的に毎日使用する必要があるいくつかのタブを持つ端末を開くためにそれを使用します。しかし、問題は、echo historyそのタブの履歴にコマンドが追加されないことです。たとえば、私のタブの1つはアプリケーションサーバーです。再起動が必要な場合は通常Ctrl+ CCtrl+ L、と入力しますUpが、Enterこのスクリプトで実行するとbashに実行された行は追加されず、最後に実行されたコマンドは通常ですexit。だから結局サーバーを再起動せずにタブを閉じることになりましたが、それが本当に迷惑でした。

私は見たこれ、以下を追加してみました。

HISTFILE=~/.bash_history
set -o history

私のスクリプトの冒頭でterminal.sh実行されたスクリプトに追加しようとしました。

str=(--tab --title="Test" -e "bash --login -c 'HISTFILE=~/.bash_history;set -o history;echo a';bash")

しかし、どちらも役に立ちません。また、スクリプトを実行する前に追加しようとしましたが、history -s echo historyそれも役に立ちませんでした。

この方法で実行されたすべてのコマンドを履歴にどのように追加できますか?

私も次のことを試しました。

#bin/bash --login

cmd='echo test'
cmd_e="bash --login -c 'unset PROMPT_COMMAND;history -s '\''$cmd'\''; eval '\''$cmd'\''';bash"
str=(--tab --title="History Test" -e "$cmd_e")

gnome-terminal "${str[@]}"

exit 0

ベストアンサー1

次のことができます。

SHELL=/bin/bash PROMPT_COMMAND='unset PROMPT_COMMAND; history -s "$CMD";
    eval "$CMD"' CMD='vi /etc/issue' gnome-terminal

(ここではvi /etc/issueコマンドとして使用されます)

これの利点は、$CMDそのシェルのタスクとして実行されるため、再開を中断して他のタスクに中断することができ、シェル環境に影響を与える可能性があることです(たとえば、次のことができますCMD='PATH=$foo:$PATH')。

これはあなたが自分で~/.bashrc設定しなかったと仮定します$PROMPT_COMMAND

編集する:

複数のタブの場合:

PROMPT_COMMAND='unset PROMPT_COMMAND; history -s "$CMD"; eval "$CMD"
  ' gnome-terminal --tab --title /etc/issue -e 'env CMD="vi /etc/issue" bash' \
                   --tab --title who -e 'env CMD=who bash'

おすすめ記事