Terminal

使用自定義提示字元串使用 zsh 啟動新終端實例

  • April 26, 2020

我希望能夠使用自定義提示字元串啟動一個終端仿真器(最好是 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,這給了我與上述類似的問題。

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設置為空:
rps1= gnome-terminal

RPS1不需要導出shell 使用的參數(例如)。它們用於設置 shell,因此應在 rc 文件中設置一次。

如果一個程序(例如gnome-terminalrps1在其環境中啟動,則從它啟動的任何後續程序都將rps1在其環境中看到。為避免這種情況,可以將以下任一內容添加到zshrc:(unset rps1使用它設置後RPS1)或typeset +x rps1


順便說一句,以下將導出兩個 shell 變數:

export RPS1=%T zsh
  • 上面export有兩個參數,導致RPS1=%T&zsh=''在環境中被創建
  • RPS1在目前 shell 中設置,只需執行以下操作:
RPS1=%T

引用自:https://unix.stackexchange.com/questions/582532