<<user_acct>>
如前所述,在加载默认配置文件时遇到问题sudo su -l <<user_acct>>
。
里面.profile
,
if [ -r "${HOME}/.profile.custom" ]; then
. "${HOME}/.profile.custom"
fi
根据我读过的内容(例如,类似于此的答案一),-l
应该已经触发了登录 shell,因此获取了.profile
,但它似乎不起作用,因为 中设置的环境变量.profile.custom
不存在(而如果我刚刚运行. .profile
,它们就会显示出来。
修改后的问题:任何想法为什么或如何解决这个问题?
答案1
当它是登录 shell 时,bash 首先查找~/.bash_profile
.如果没有找到,它就会寻找~/.bash_login
。如果没有找到,它就会寻找~/.profile
。无论如何,即使登录 shell 是交互式的,bash 也不会读取~/.bashrc
.
我建议坚持 中的以下内容~/.bash_profile
,并且不要有~/.bash_login
:
if [ -e ~/.profile ]; then . ~/.profile; fi
case $- in *i*) if [ -e ~/.bashrc ]; then . ~/.bashrc; fi;; esac
这样,.profile
无论您的登录 shell 是 bash 还是其他 sh 变体,您都会被加载,并且.bashrc
无论 shell 是否是登录 shell,您都会由 bash 加载。
答案2
不做sudo su
,没必要。sudo -i -u loginname
就是你想要的。
答案3
问题的作者提供了以下解决方案:
毕竟我找到了解决我的问题的方法...结果证明这是相当微不足道的 - 只需设置环境变量
.bash_profile
即可设置它们。根据
bash
手册页,正如所讨论的这里,当 bash 作为交互式登录 shell 或带有 --login 选项的非交互式 shell 被调用时,它首先从文件 /etc/profile 中读取并执行命令(如果该文件存在)。读取该文件后,它会按顺序查找 ~/.bash_profile、~/.bash_login 和 ~/.profile,并从第一个存在且可读的文件中读取并执行命令。启动 shell 时可以使用 --noprofile 选项来禁止此行为。
..关键在于第一的一个存在的。
经验教训:阅读“精美”印刷品