gpt4 book ai didi

linux - 如何识别终端中运行的是哪个 REPL?

转载 作者:太空宇宙 更新时间:2023-11-04 12:32:14 24 4
gpt4 key购买 nike

我正在尝试根据特定窗口的操作更改我的终端标题。到目前为止,我有以下内容将根据目录和服务器进行更新。

function settitle() {
if [[ -z "$ORIG" ]]; then
ORIG=$PS1
fi
TITLE="\[\e]2;$*:$(dirs -0)\a\]" #dirs -0 is like pwd but with ~/ instead of /home/user/
PS1=${ORIG}${TITLE}
}

PROMPT_COMMAND="settitle local" # local is the server name in this case

现在,有时我在 PHP (php -a) 或 MySQL (mysql -u user -ppass) REPL 中,我想要标题以反射(reflect)这一点,而不仅仅是我从中启动 REPL 的任何目录。

我能想到的最好办法是以某种方式获取最后一个命令,然后找出第一个单词是什么,然后在 settitle() 中运行 if 检查。我已经尝试了 here 中的所有内容和 here在其他地方,虽然我通常可以让它的一部分在命令行中工作,但在 settitle() 中却没有。例如。

local:~$ echo 'foobar'
foobar
local:~$ !:0
echo
# I add echo !:0 to settitle()
local:~$ source .bashrc
!:0
local:~$

注意:它应该是“source”,或者至少是之前的“echo”。 !:0 不会将自己识别为命令,因此它会一遍又一遍地重复最后一个真正的命令。回显的“!:0”是一个文字字符串,而不是命令的结果。此外,保存到 var 不起作用,只是输入命令而不尝试回显/保存结果会得到 !:0: command not found

我不想把它变成 XY problem ,所以如果我在这个过程的任何一步在这里树错了树,请告诉我。目标是在输入 REPL 时能够更改终端窗口的标题。 我如何确定命令何时将我输入其中?

最佳答案

请注意,当您处于不同的 REPL 中时,PROMPT_COMMAND 和类似的 shell 功能不相关;从 shell 的角度来看,整个 REPL session 就是一个命令。在您退出该 REPL 之前,shell 提示符不会再次出现,这就是 PROMPT_COMMAND 和 friend 被激活的时刻。

您可以做的一件事是为您用来启动 REPL 的命令添加别名,以便它首先设置窗口的标题:

alias phpa='setttitle PHP; php -a'
alias mysqli=`settitle MySQL; mysql -u "$USER"'

或类似的东西。

顺序是这样的:

  1. PROMPT_COMMAND 运行。
  2. shell 打印它的提示符。
  3. 您键入启动 REPL 的命令
  4. 您在 REPL 中。你看到的提示是REPL打印的,不是shell,这里不涉及。 shell 只是卡在外面等你退出 REPL;它不打印任何提示,因此它永远不会运行 PROMPT_COMMAND。
  5. 您在 REPL 中键入命令。无论您运行多少次,它都是 shell 视为单个命令的单个 session 的一部分。
  6. 您退出 REPL。
  7. PROMPT_COMMAND 运行。
  8. shell 打印它的提示符。

关于linux - 如何识别终端中运行的是哪个 REPL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43005238/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com