将“set -o vi”放入的正确脚本文件是什么?

将“set -o vi”放入的正确脚本文件是什么?

我应该补充一点,我希望它默认为交互式(bash)shell 中的所有用户打开。虽然,我是在我的家庭系统上执行此操作,我是唯一用户,但我希望 root 也为交互式 shell 打开此功能。

我想知道是否应该将set-readline.sh包含此行的文件添加到其中/etc/profile.d/或本身执行此操作/etc/profile,或者我应该在哪里(也许如何)正确执行此操作?

答案1

当您的发行版具有 时/etc/profile.d,通常意味着/etc/profile任何 Bourne/POSIX 兼容 shell 或等效 shell 将源全部文件匹配/etc/profile.d/*.sh.因此,如果您想为所有用户添加自己的自定义,您应该创建自己的文件,例如/etc/profile.d/set-vimode.sh.

但是,set -o vi这是一种 shell 设置,因此不能从一个进程继承到另一个进程。因此,您必须在每个 shell 启动时设置它,而不仅仅是登录 shell。对于这种性质的全局设置来说,最合适的地方就是/etc/bash.bashrcBash。其他 shell 将有其他约定。

就像评论中的 Kusalananda 一样,我也敦促您不要更改全局默认值,尽管 - 正如您所说 - 您是该系统的唯一用户。如果您曾经作为系统管理员团队的一员工作,并且该团队至少有一名成员的强烈偏好与您的冲突(在 shell vi/emacs 模式选择中),则更改全局默认值可能会产生令人惊讶的敌意。 (去过那里,看到过。)

唯一让每个人都满意的解决方案是使用未设置选项的sudo -s方式成为 root ,这样 root shell 将使用您的主目录(以及您的首选设置),同时具有.这使得团队中的每个管理员都可以满足自己的偏好,而不会踩到其他人。sudoersalways_set_homeroot

请注意,在某些具有更强可审核性要求的系统中,您可能需要仅运行每个单独的特权命令,sudo而不是使用以 root 身份运行的 shell,以提供清晰的日志,准确说明使用了哪些特权命令、何时以及由谁使用。当然,您可以在家庭系统上做任何您想做的事情,但如果您认为有一天您可能会在金融、医疗保健或国家安全敏感环境中担任系统管理员,请养成避免在交互式 root shell 中工作的习惯会很好地为你服务。

相关内容