我在多用户系统上。我有 sudo b/c 我猜我有责任。有时,我想切换到另一个用户来帮助他们做某事,但我有一个被欺骗的 bashrc/vimrc,我想保留它们。
对于root来说,这非常简单。在我的.bashrc
:
alias sudo='sudo '
alias -- -i='bash --rcfile $HOME/.bashrc'
export HOME="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null && pwd )"
基本上,这意味着sudo -i
让我 root,获取 my .bashrc
,并保留 my $HOME
as/home/jeremy
而不是/root
,这意味着 vim 在正确的位置查找颜色和 rcfiles 等内容。
我想做一些与成为其他用户类似的事情。理想:
来源我的
.bashrc
;让vim使用我的.vim/
诸如此类vimrc
的东西colors/
不硬编码路径——在某些系统上我是
jeremy
;对别人来说我是jdr
,等等。只需要最少的额外输入即可通过别名或功能来实现所有这些工作。
对于 root,我可以-i
完全使用另一个命令来完成我想要的操作。 man bash
没有列出任何以其他用户身份执行操作的选项。man sudo
确实如此,但那样我就没有任何选择来获取.bashrc
.su
看起来很有希望,正如man su
所说的,su -m
保留环境并且不设置 USER 或 HOME,但我必须将sudo su -m
我的 USER 设置为root
.我无法添加使用&&
或其他命令,因为我需要在新 shell 中运行命令,而不是在该 shell 退出后运行。简而言之,我所知道的命令都不能满足我的要求。
我能达到的最接近的是sudo -Esu user
,它使我成为user
并保留我导出的所有变量。我可以export x=". $HOME/.bashrc"
在 my 中添加类似的内容.bashrc
,然后eval $x
当我成为 时user
,但这会产生权限错误,并且设置 +x on.bashrc
是不够的,因为我的主目录的默认权限阻止其他用户访问,而且我不确定我是否想要改变它,除非没有其他选择。并非所有我要成为的用户都拥有特权,所以我不能凭sudo
自己的方式进入。
长话短说:成为另一个用户,同时保留当前用户的别名、函数、PS1、PROMPT_COMMAND 和 vim 配置。重击 4.2