Bash 如何通过iTerm2中的提示命令重命名窗口?

Bash 如何通过iTerm2中的提示命令重命名窗口?,bash,iterm2,Bash,Iterm2,我想在iTerm2中打开终端会话,并发送文本将窗口标题重命名为“Jupyter笔记本”,然后打开Jupyter笔记本: export PROMPT_COMMAND='echo -ne "\033]0;Jupyter Notebook\007"'; VAR="jupyter notebook"; $VAR 但是,上面的命令将首先打开Jupyter笔记本,然后在我使用CMD-C中断笔记本会话后,将终端标题重命名为“Jupyter笔记本” 如何在笔记本会话打开之前重命名窗口标题?不要使用提示符\u

我想在iTerm2中打开终端会话,并发送文本将窗口标题重命名为“Jupyter笔记本”,然后打开Jupyter笔记本:

export PROMPT_COMMAND='echo -ne "\033]0;Jupyter Notebook\007"';  VAR="jupyter notebook"; $VAR
但是,上面的命令将首先打开Jupyter笔记本,然后在我使用CMD-C中断笔记本会话后,将终端标题重命名为“Jupyter笔记本”


如何在笔记本会话打开之前重命名窗口标题?

不要使用
提示符\u命令执行此操作。它仅用于更新提示或窗口标题,以拾取在上一个命令(如
cd
)期间所做的更改。直到命令完成并且shell将要打印下一个提示符时,才会执行该命令——这就是名称中包含
prompt
的原因

使用别名或函数更新标题并运行命令:

alias jnb='echo -ne "\033]0;Jupyter Notebook\007"; jupiter notebook'

通过创建另一个环境变量来解决:

TITLE='echo -ne "\033]0;Jupyter Notebook\007"'; $TITLE; VAR="jupyter notebook"; $VAR
但我还是不明白bash的行为。如果我试图在运行Apache Spark shell之前设置一个标题,那么bash会忽略echo命令并适时地启动Spark shell:

echo -ne "\033]0;Apache Spark\007"; spark-shell
Last login: Tue Jan 22 11:54:15 on ttys001
MacBook:directory user$ 'echo -ne "\033]0;Apache Spark\007"'; spark-shell
2019-01-22 12:25:25 WARN  NativeCodeLoader:62 - Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
Setting default log level to "WARN".

显然,echo命令之后的命令可以覆盖echo。如果有人能解释这种行为,我将非常感激。

提示符命令在显示下一个提示符之前执行。命令完成后才会显示提示。提示命令通常用于使标题反映在上一个命令中更改的内容,例如更改目录。使用别名时也会出现同样的问题。我在别名定义中使用了不正确的语法。当我把它修好的时候,它对我有用。我没有Jupytor,我将其更改为
vi
,但它在
vi
运行时更改了窗口标题。