Terminal

如何在終端提示符中修改我的 conda env 變數?

  • May 3, 2022

我想自定義我的終端提示。通常,當啟動 conda 環境時,環境的名稱會添加到 PS1 字元串之前。我想對此進行更多定制,但無法弄清楚。

如果我添加changeps1: false到我的.condarc文件中,則在啟動新環境時不會修改終端提示。然後我可以在我.bash_profile的例子中修改環境變數:

PS1+="\[${cyan}\]<$(basename $CONDA_DEFAULT_ENV)> ";

這將返回環境的名稱,我希望用胡蘿蔔包圍的顏色,但是這僅在我執行source .bash_profile啟動環境後才有效,沒有效果,這並不意外。

我的問題是如何在啟動環境時更新提示,或者有更好的方法嗎?

這與這個問題有關

而這個範例配置文件但是那些並沒有直接解決我在啟動環境時遇到的提示沒有改變的問題

這裡的問題是您使用雙引號並使用直接命令替換,這意味著$(basename $CONDA_DEFAULT_ENV)(and 因此$CONDA_DEFAULT_ENV) 的值只會在執行該行程式碼時被評估一次,並將逐字合併到 PS1 中細繩。

bash 處理 PS1 的方式,它會$(...)在每次列印提示時評估序列,所以你需要做的是以文字形式保留序列($例如,通過用反斜杠轉義 s),這應該會產生你的結果重新尋找。

所以這應該工作:

PS1+="\[${cyan}\]<\$(basename \$CONDA_DEFAULT_ENV)> ";

或者,更好的是,在變數周圍添加雙引號,這樣如果有空格,或者它為空或未設置,basename命令將繼續工作:$CONDA_DEFAULT_ENV

PS1+="\[${cyan}\]<\$(basename \"\$CONDA_DEFAULT_ENV)\"> ";

請注意,我沒有 escape ${cyan},因為只評估一次就可以了,因為它預計不會改變……

轉義元字元(例如$and ")在某些時候開始變得繁重,因此在某些時候使用單引號來逐字保留字元串可能是更好的選擇,因此我們可以這樣做。但是由於我們仍然要擴展${cyan},所以讓我們混合雙引號和單引號來以最少的轉義達到所需的結果:

PS1+="\[${cyan}\]"'<$(basename "$CONDA_DEFAULT_ENV")> ';

您可能仍然無法將顏色設置為青色而不在最後重置它…但這應該很容易解決,方法是"\[${...}\]"在末尾添加另一個塊以重置格式的程式碼(不確定您的顏色常量來自哪裡來自,因此請檢查重置程式碼。)但在您的特定環境中,這可能不是問題,如果您在 PS1 上附加了更多行以進一步修改它,那也會改變顏色。(我想這是您的情況,因為您在獲取個人資料時都會說您的作品。)

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