我刚刚注意到我的环境行为异常,因为在某些时候这个别名被引入
/etc/profile.d/vim.sh
:
$ command -v vim
alias vim='__vi_internal_vim_alias'
浏览 中的文件/etc/profile.d
,它们对我来说没有用,因为我需要的一切都已经在我的
.bashrc
.因此,Bash 在登录后开始处于不必要的污染状态。我希望 Bash 完全忽略该目录并只执行.bashrc
.然而,正如联机帮助页所述,在继续使用用户控制的 rc 文件之前,它将盲目地获取该路径中的所有内容。
这是一个公司环境,因此我无法控制操作系统,只能控制我的用户帐户。
有一个选项--noprofile
,但我似乎无法将其添加到 passwd 中:
$ chsh
Changing shell for philipp.
New shell [/bin/bash]
> /bin/bash --noprofile
chsh: "/bin/bash --noprofile" does not exist
通过 SSH,我可以bash --noprofile
手动添加,但这变得很乏味,因为在正常工作日中我有数十个甚至数百个 SSH 连接。
如果我能让 Bash 忘记顶部的那些设置.bashrc
,然后继续使用干净的环境,那就没问题了。我希望避免的是必须用任何/etc/profile.d
可能添加到我正在使用的所有系统上的定义来玩打地鼠游戏。
答案1
我想你可能不走运。 chsh
将您可以选择的 shell 限制为 中列出的 shell /etc/shells
,并且您不能指定命令行参数。
您唯一可以研究的就是尝试 中列出的其他 shell /etc/shells
,以防它们无法读取/etc/profile.d
,但如果这有效,我会感到惊讶。您还可以尝试unalias -a
在配置文件脚本的顶部清除所有定义的别名。
答案2
感谢您的提示“通过 SSH 我可以手动添加 bash --noprofile”。我发现可以将其添加到本地 ~/.ssh/config 文件中,这使其透明,以避免“手动......乏味”的部分。例如,
# ~/.ssh/config
host myserver
hostname myserver.domain.com
user myname
# Uncomment to choose whether to use login shell or not.
#RemoteCommand bash --login
#RemoteCommand bash --noprofile
RemoteCommand bash
RequestTTY yes
更多详细信息请参见https://superuser.com/questions/1224938/ssh-host-is-a-login-shell-but-ssh-host-command-is-not