终端打开时运行的命令不会出现在历史记录中

终端打开时运行的命令不会出现在历史记录中

我有以下简单的terminal.sh脚本:

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

我基本上用它来打开一个带有几个我每天需要使用的选项卡的终端。但问题是该echo history命令没有添加到该选项卡的历史记录中。例如,我的选项卡之一是应用程序服务器。当我需要重新启动它时,我通常输入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作为该 shell 的作业运行,因此您可以挂起恢复,将其作为其他作业中断,并且它可以影响 shell 的环境(例如您可以这样做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'

相关内容