使用自定义提示字符串通过 zsh 启动新的终端实例

使用自定义提示字符串通过 zsh 启动新的终端实例

我希望能够启动一个终端模拟器(最好是 gnome-terminal),并使用自定义提示字符串在内部运行交互式 zsh。我不想修改我的默认提示字符串,.zshrc因为我最常使用它,只是偶尔我想启动带有自定义 zsh 提示字符串的终端(更具体地说,我希望时间显示在右手中)侧面提示)。

如果我已经打开了终端窗口,我可以通过运行以下命令来解决此问题:

export RPS1=%T zsh

但我无法弄清楚使其与启动新终端实例一起工作的语法。这是我对每个命令下面的错误消息所做的尝试:

gnome-terminal -- export RPS1=%T zsh
# Error: Failed to execute child process “export” (No such file or directory)
gnome-terminal -- sh -c export RPS1=%T zsh
# Prints all the options, like with `set`
# and then exits with "The child process
# exited normally with status 0".
gnome-terminal -- sh -c "export RPS1=%T zsh"
# The child process exited normally with status 0.
gnome-terminal -- sh -c "export RPS1=%T; zsh"
# This start the terminal with zsh, but the RSP1 is not changed

我考虑读取自定义 rc 文件,就像这个答案一样,但在 zsh 中似乎没有办法在不使用的情况下执行此操作source,这给我带来了与上面类似的问题。

答案1

在 中zshrc,允许RPS1通过将其设置为覆盖:

# If rps1 is not set, use a default value
RPS1=${rps1-"Your usual RPROMPT"}
  • RPS1现在,您可以通过在其环境中设置来启动具有不同命令的命令rps1,例如:
rps1=%T gnome-terminal
  • 参数扩展形式${param-word}允许RPS1设置为null:
rps1= gnome-terminal

shell 使用的参数(例如RPS1)不需要导出。它们用于设置 shell,因此应在 rc 文件中设置一次。

如果一个程序(例如gnome-terminal)在其环境中启动rps1,则从该程序启动的任何后续程序都将rps1在其环境中看到。为了避免这种情况,可以将以下任一内容添加到zshrc: unset rps1(使用它来设置 后RPS1)或typeset +x rps1


顺便提一句,以下将导出两个 shell 变量:

export RPS1=%T zsh
  • 上面有export两个参数,导致RPS1=%T&zsh=''在环境中创建
  • RPS1要在当前 shell 中设置,只需执行以下操作:
RPS1=%T

答案2

当您运行 shell 时,它会处理您的/~.zshrc,这会覆盖提示符。

一种选择是在您的~/.zshrc

MY_PROMPT="${MY_PROMPT:-"> "}" # Set the value to "> " if it isn't currently set
RPS1="${MY_PROMPT}"

然后,如果您启动 shell,您将得到:

> 
> MY_PROMPT="my new prompt > " zsh
my new prompt >

请注意,我选择一个非标准变量(此处MY_PROMPT)很重要,因为在 shell 处理您的~/.zshrc.

相关内容