Shell
在沒有 chsh 或管理員權限的情況下更改預設 shell
我在這個執行緒中看到了以下片段:如何從 csh 更改為 bash 作為預設 shell
sleep 2 if (-x /usr/local/bin/bash) then exec /bin/sh -c '. ~/.profile; exec /usr/local/bin/bash' endif
我的理解是,如果您將此程式碼段放入
~/.login
其中,它將bash
在您登錄時呼叫。我有類似的情況,我想使用類似的程式碼段來呼叫
zsh
與我登錄時使用的預設版本不同的版本。我遇到這個麻煩的部分原因是因為我無法選擇zsh
中允許的選項中我想要的版本chsh
,並且我沒有管理員權限。有了這個:
- 在不同版本的 zsh 之間切換時,我將如何更改上面的程式碼片段來執行此操作?
- 為什麼上面的程式碼片段需要兩個
exec
命令?他們在做什麼?另外,為什麼上面的程式碼段使用sh
andbash
(使用者應該使用 登錄csh
)
如果要執行 zsh 而不是 bash,只需替換為執行檔
/usr/local/bin/bash
的路徑即可。zsh
請注意,此程式碼段特定於 csh;如果您的登錄 shell 不是 (t)csh,則此程式碼~/.login
不會為您做任何事情。至於為什麼要以這種方式編寫程式碼段,您必須詢問編寫它的人。*$$ Checks who that was. $$*哦。好吧,如果您只是這樣做,
exec /usr/local/bin/bash
那麼您將不會啟動登錄 shell,因此您.profile
將不會被執行。但這可以通過執行以更簡單的方式解決/usr/local/bin/bash --login
。現在,如果您的登錄 shell 不是 csh,您將需要一個不同的片段
exec
。在 Bourne 風格的 shell 中,包括 zsh:if [ -x ~/bin/zsh ]; then exec ~/bin/zsh; fi
如果
exec ~/bin/zsh -l
您希望 zsh 的新實例讀取您的~/.zprofile
. 請注意,如果您這樣做,上面的程式碼段必須在您的.profile
or中.bash_profile
;如果您的登錄 shell 是 zsh,請不要將程式碼段放入您.zprofile
的exec
.