Shell
由另一個解釋器切換預設 shell
所以我對 linux 有一些經驗,我一直想知道是否可以修改終端,使其執行不同的解釋器(如
python
)而不是預設的 shell 解釋器(如sh
或bash
)。(請注意,這不僅僅是“我在哪裡更改我的 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。