我有一个 bash 脚本,它启动一个带有多个选项卡的终端窗口,并在每个选项卡中执行与此类似的命令(我知道不支持标题):
#!/bin/bash
title1="foo"
title2="bar"
cmd1="sleep 1s"
cmd2="cd ~/Desktop"
gnome-terminal --tab --title="$title1" --command="bash -c '$cmd1; $SHELL'" \
--tab --title="$title2" --command="bash -c '$cmd2; $SHELL'"
在实际脚本中,当其中一个选项卡中的进程终止时,我通常必须重新启动它。但是,按向上键不会产生该选项卡中脚本中使用的命令。此行为与此脚本相同,因为如果我在第一个选项卡中按下向上键,我不会得到“sleep 1s”,而是得到我在其他地方使用的完全不同的命令。
有没有办法让打开的选项卡保留脚本中使用的 $cmd?
答案1
应该有比这更优雅的解决方案,但您可以尝试以下方法:
--command="bash -c 'export HISTFILE=/tmp/hist\$\$; history -s \"$cmd1\";
history -w; $cmd1; exec $SHELL'"
其中 bash 被赋予了自己的历史文件hist$$
,$$
必须对其进行转义,以便稍后评估进程的 pid。history -s
将字符串保存到历史列表中,并将-w
其保存到HISTFILE
。假定 shell 使用环境中设置的此值。例如,您可能需要--norc
为 bash 添加以阻止它设置与您的不同的历史文件。~/.bashrc