我想要一个命令或脚本使用 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_history
。如果我将history
命令添加到它rcfile
显示历史记录history.txt
已加载,所以之后的东西rcfile
会覆盖我加载的历史记录。
我还发现如果我取消设置HISTFILE
变量export HISTFILE=''
的末尾rcfile
,的历史记录history.txt
不会被覆盖并有效。但是,我不想取消设置,因为我确实希望在使用新打开的终端时HISTFILE
保存历史记录。.bash_history
最后,我-o
在 bash 中找到了这个选项,所以我尝试用它做我想做的事情。我rcfile
把我的改为:
FILE=~/.bashrc && test -f $FILE && source $FILE
history -c && history -r ~/saved/history.txt
set -o history
并运行以下命令:
bash --rcfile rcfile.txt +o history
我希望运行bash
with+o history
能够防止历史记录history.txt
被覆盖,而set -o history
中的命令rcfile
会重新激活 bash 历史记录。然而,这也无法按预期工作,因为历史记录是来自的历史记录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
.