我希望能够启动一个终端模拟器(最好是 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
.