
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+ C、Ctrl+ 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'