Shell

由另一個解釋器切換預設 shell

  • June 5, 2020

所以我對 linux 有一些經驗,我一直想知道是否可以修改終端,使其執行不同的解釋器(如python)而不是預設的 shell 解釋器(如shbash)。

(請注意,這不僅僅是“我在哪裡更改我的 shell? ”或“如何從 csh 更改為 bash 作為預設 shell ”。這是關於執行本身不是shell而是解釋器的東西。我給 python作為一個讓事情更清楚的例子,但我可以很容易地說 php 或任何其他解釋器。)

這可能嗎,如果可以,我該怎麼做?

正如評論和第一個答案中提到的那樣:您只能(至少使用chsh)更改為/etc/shells. 如果您手動強制使用不同的 shell /etc/passwd(或不同的使用者數據庫),那麼它可能會由login(我沒有嘗試過)執行,但這不會解決問題,例如python未在/etc/shells.

登錄 shell 有一定的任務,主要是為使用者設置環境。因此只有登錄 shell 讀取/etc/profile.

可能的妥協

您可以創建一個連結(符號連結或硬連結,我目前沒有意見哪個更好)到一個普通的 shell,比如

cd /bin
ln -s bash bash-python

並添加並將/bin/bash-python/etc/shells設置為使用者的預設外殼。在/etc/profile(或/etc/bash.bashrc)中,您可以檢查 shell 是否已使用此名稱啟動並執行python

[[ $0 =~ bash-python ]] && exec python
# or
[[ $0 =~ bash-python ]] && python

我還不確定哪個更好。也許沒有exec用於wtmp日誌記錄的變體,但我不確定這是否是由登錄外殼完成的;登錄shell存在後可能是PAM。

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