的背景
我在 CentOS 环境中工作,其中有多台 CentOS 机器。目前有多个开发人员,每个开发人员都有自己的登录名/主目录,然后对于各种管理任务,我们都共享一个超级用户帐户。
问题
我的个人登录名的 .bash_profile 中存在许多别名、变量、函数和设置。这些都不在共享超级用户的 .bash_profile 中。我目前的解决方法是,每次我以超级用户身份使用 sudo 时,我都会从我的个人用户主目录中重新执行我的 .bash_profile。我不允许编辑超级用户的初始化内容
问题
有什么方法可以自动化我的 sudo 序列,以便在我执行 sudo 之后它将执行我的个人 .bash_profile,而不需要我编辑超级用户的 bash init 内容?
答案1
您可以使用这个巧妙的小技巧来保留别名:
alias sudo='sudo '
这允许检查下一个参数的别名扩展(从您当前的配置文件中!)
来自 man 别名:
值中的尾随空格会导致在别名扩展时检查下一个单词是否进行别名替换。
对于功能等,YMMV 有所不同。
/etc/sudoers 中的 env_reset 是我发现的另一种解决方法。
http://blog.edwards-research.com/2010/07/keeping-aliases-with-sudo-sort-of/
答案2
sudo
有一个选项可以保留调用者的环境,但有一些注意事项。来自手册页
-E -E(保留环境)选项将覆盖 sudoers(5) 中的 env_reset 选项。仅当匹配的命令具有 SETENV 标记或在 sudoers(5) 中设置了 setenv 选项时才可用。
答案3
编辑 /etc/sudoers (visudo)
创建或修改默认的 env_keep 变量
Defaults env_keep = "COLORS DISPLAY HOSTNAME HISTSIZE INPUTRC KDEDIR \
LS_COLORS MAIL PS1 PS2 QTDIR"
sudo 执行后,这将在您的环境中保留指定的环境变量。
或者注释掉Defaults env_reset,但是注意这样很危险!
#Defaults env_reset
这会在执行 sudo 之前使整个环境不受 shell 控制。