我有以下简单的terminal.sh
脚本:
#bin/bash --login
str=(--tab --title="Test" -e "bash --login -c 'echo history';bash")
gnome-terminal "${str[@]}"
exit 0
我基本上用它来打开一个带有几个我每天需要使用的选项卡的终端。但问题是该echo history
命令没有添加到该选项卡的历史记录中。例如,我的选项卡之一是应用程序服务器。当我需要重新启动它时,我通常输入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
作为该 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'