通过另一个解释器切换默认 shell

通过另一个解释器切换默认 shell

所以我对 Linux 有一些经验,我总是想知道是否可以修改终端,以便它执行不同的解释器(如python)而不是默认的 shell 解释器(如shbash)。

(请注意,这不仅仅是“在哪里更换外壳?“ 或者 ”如何将默认 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 终端中,您可以在您想要的任何配置文件中编辑命令:

显示“命令”选项卡的 GNOME 终端首选项

这允许您使用所选命令而不是默认 shell 打开终端:

运行 IPython 的 GNOME 终端

这比以下侵入性更小彻底改变你的默认 shell(如果您不使用 中的 shell 之一,则还需要管理协助/etc/shells)。

相关内容