将执行的命令保留在其选项卡中(bash 脚本)

将执行的命令保留在其选项卡中(bash 脚本)

我有一个 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

相关内容