当标题设置为终端选项卡时如何运行脚本?

当标题设置为终端选项卡时如何运行脚本?

在日常工作中,我保留了许多终端选项卡。所以为了识别这些,我设置了标题

终端选项卡 > 设置标题

例如 IRC、API 代码库、API 日志、Server1 等

我想做的是根据选项卡的标题在选项卡中执行某些操作。例如

  1. 当我设置“API Codebase”时,它应该转到我的代码库并激活适当的 python 虚拟环境
  2. 当我设置“IRC”时,它应该运行irssi
  3. 当我设置“Server1”时,应该运行 ssh 命令来连接到服务器

等等。

如何才能做到这一点?

答案1

我的做法略有不同。不要手动设置选项卡的标题,而是创建一个既设置标题又运行所需命令的函数。添加此功能(改编自这里)到你的~/.bashrc(假设你使用的是 bash):

function set-title() {
  if [[ -z "$ORIG" ]]; then
    ORIG=$PS1
  fi
  TITLE="\[\e]2;$@\a\]"

  ## Do different things depending on the string passed
  case "$@" in
        "API Codebase")
            echo cd ~/codebase
            echo python ...
            ;;
        "IRC")
            echo irssi
            ;;
        "Server1")
            echo ssh server1
            ;;
  esac
  PS1="${ORIG}${TITLE}"
}

答案2

据我所知无法检查终端的状态来自 shell 中的进程。

但即使可以,根据终端标题更改行为也很容易出错。没有简单的方法来检查拼写错误或类似的情况。它的可扩展性也不是很好——您将拥有一个do_something_based_on_title命令,该命令会随着您添加功能而不断增长。

set-title让每个命令在运行时负责设置自己的终端标题,而不是使用一个庞大的脚本。您可以使用别名轻松完成此操作,如下所示(将其放入您的.bashrc或类似的名称中)。

set_title() {
  echo -e "\e]0;$*\a"
}

alias apic='set_title "API Codebase"; command_for_api_codebase'
alias irc='set_title "IRC"; irssi'
alias server1='set_title "Server1"; ssh server1'

现在,您可以对这些命令进行制表符补全,不再有标题设置和程序启动代码出现问题的风险,也不再需要右键单击选项卡来设置其标题。只需运行您想要的命令,标题也会随之设置。

相关内容