所以我对 Linux 有一些经验,我总是想知道是否可以修改终端,以便它执行不同的解释器(如python
)而不是默认的 shell 解释器(如sh
或bash
)。
(请注意,这不仅仅是“在哪里更换外壳?“ 或者 ”如何将默认 shell 从 csh 更改为 bash“。这是关于运行那些不属于贝壳,本身,但是是解释器。我以 python 为例,以使事情更清楚,但我可以轻松地说 php 或任何其他解释器。)
这可能吗?如果可以,我该怎么做?
答案1
正如评论和第一个答案中提到的:您只能(至少使用chsh
)更改为 中列出的那些 shell /etc/shells
。如果您手动强制进入不同的外壳程序/etc/passwd
(或不同的用户数据库),那么它可能会由login
(我没有尝试过)运行,但这并不能解决问题,这就是例如python
未在 中列出的原因/etc/shells
。
登录 shell 有一定的任务,主要是为用户设置环境。因此只有登录 shell 会读取/etc/profile
。
可能的妥协
您可以创建一个到常规 shell 的链接(符号链接或硬链接,我目前没有意见哪个更好),例如
cd /bin
ln -s bash bash-python
并将其添加/bin/bash-python
到/etc/shells
用户的默认 shell 中并将其设置为默认 shell。在/etc/profile
(或/etc/bash.bashrc
) 中,您可以检查 shell 是否已使用该名称启动并执行python
:
[[ $0 =~ bash-python ]] && exec python
# or
[[ $0 =~ bash-python ]] && python
我还不确信哪个更好。也许是没有exec
日志记录的变体wtmp
,但我不确定这是否是由登录 shell 完成的;也许是登录 shell 存在后的 PAM。
答案2
chsh
允许您切换登录 shell(有限制,另请参阅/etc/shells
)
答案3
是的,这是可能的。一种方法是适当配置您的终端;具体取决于您的终端模拟器。
在 GNOME 终端中,您可以在您想要的任何配置文件中编辑命令:
这允许您使用所选命令而不是默认 shell 打开终端:
这比以下侵入性更小彻底改变你的默认 shell(如果您不使用 中的 shell 之一,则还需要管理协助/etc/shells
)。