是否可以運行新的zsh
或bash
外殼,並在命令行中設置定製的PS1
?它應該分別覆蓋由.bashrc
和.zshrc
設置的默認主題。以定製命令行方式運行新的zsh和bash shell
我談論類似zsh --myprompt="yes master? >"
編輯: 我不想影響任何用戶端配置文件。我希望它適用於任何具有任何配置的用戶。
是否可以運行新的zsh
或bash
外殼,並在命令行中設置定製的PS1
?它應該分別覆蓋由.bashrc
和.zshrc
設置的默認主題。以定製命令行方式運行新的zsh和bash shell
我談論類似zsh --myprompt="yes master? >"
編輯: 我不想影響任何用戶端配置文件。我希望它適用於任何具有任何配置的用戶。
會不會export PS1='yes master? >' zsh/bash
工作?
我看不出有什麼理由不應該是如此簡單,但實現什麼你
後任何你做的命令行很可能是您的配置文件被覆蓋。你需要稍微修改相應的文件使用類似
# *After* you make any changes to PS1
if [[ -n $MY_PS1 ]]; then
PS1=$MY_PS1
fi
如果你調用shell作爲
MY_PS1='yes master? > ' bash # or zsh
然後MY_PS1
將被用來代替無論是在.{bash,zsh}rc
配置。
好的,謝謝,它確實應該工作,但我需要一個解決方案,這將適用於任何**用戶,而不會影響用戶配置文件 - 這可能嗎?我將這個約束添加到了問題中。 –
你可以使用'PS1 ='...'bash --norc --noprofile'來完全關閉任何配置文件處理('zsh'有類似的選項),這將阻止任何進一步修改PS1超出你指定,但這也可能會關閉很多其他配置。 – chepner
創建您自己的「墊片」rc文件,供用戶使用,然後用--rcfile
選項(用於bash)或--rcs
選項(用於zsh)調用該文件。這應該首先獲取用戶的rc文件。例如,我們稱之爲/usr/local/share/.fancypromptrc。在bash,這可能是這樣的:
source "$HOME/.bashrc"
export PS1="DOLLAZ $"
而在此zsh的可能看起來像:
source "${ZDOTDIR:-$HOME}/.zshrc"
export PS1="DOLLAZ $"
然後用戶將與bash --rcfile /usr/local/share/.fancypromptrc
啓動慶典。在zsh中,它將是zsh --rcs /usr/local/share/.fancypromptrc
。
這樣用戶不必修改他們的rc文件,如果他們已經設置PS1,它仍然會被替換。我唯一能想象到的是,如果他們有一個PROMPT_COMMAND來覆蓋PS1或類似的東西的話。
謝謝!這與我的答案很相似。如果我正確地獲取了所有內容,那麼在執行帶有「--rcs」選項的shell時,shell不會首先加載用戶選項?在這種情況下,我會堅持我的解決方案,但感謝您解決問題! :)另外我jsut在示例文件上做了調試,我不知道爲什麼,但是子shell沒有使用'--rcs'指向的文件。 –
您仍然需要從您的shim rcfile中獲取用戶的.bashrc/.zshrc,就像上面的例子。你使用的是什麼版本的zsh? –
我的系統上的zsh版本是5.0.5。 –
我找到了答案。我們應該創建一個自定義配置文件目錄,像.zshrc
:
source $ZDOTDIR_ORIG/.zshrc
export PS1="[x] "$PS1
,然後使用腳本來執行子shell記住ZDOTDIR
變種的原始值下ZDOTDIR_ORIG
名,這樣pseudopythoncode:
if os.environ.has_key('ZDOTDIR'):
zdotdir = os.environ['ZDOTDIR']
else:
zdotdir = os.path.expanduser('~')
os.environ["ZDOTDIR"] = shellConfPath
os.environ["ZDOTDIR_ORIG"] = zdotdir
然後執行shell。它將使用ZDOTDIR
目錄中的配置文件。
嗯,我不知道爲什麼,但它確實有效。我正在使用Python的函數來設置子環境,但是它會被覆蓋。當嘗試這種方法它只是工作,沒有覆蓋兒童配置,耶:) –
這*不*工作。刪除關鍵字'export',如果用戶的配置文件不改變'PS1'的值,它可能會失效。 – chepner
@chepner:對!我在終端測試中感到困惑。它不適用於子進程。它只是將值輸出到當前shell中。 –