如何在非root用户bash和通过“sudo -i”打开的shell之间共享bash别名?

如何在非root用户bash和通过“sudo -i”打开的shell之间共享bash别名?

我习惯使用sudo -i并且没有root设置密码,iesu -不起作用。我正在寻找一种方法来在用户 shell(例如,当我以登录显示管理器的用户身份启动bash时打开的 shell)和 所打开的 shell 之间共享别名。gnome-terminalsudo -i

据我所知man sudo,它是一个登录 shell,它应该是源~/.profile,即/root/.profile,但输入别名/root/.profile不起作用。只有当我在别名bash打开的 shell 中运行时才sudo -i可用。根据/etc/passwd root的 shell 是bashSHELL变量确认(在由启动的 shell 中sudo -i)。

我宁愿不输入别名,/etc/profile因为这样会将它们暴露给任何用户,而我只希望它们仅供显示管理器用户使用root

答案1

相关Serverfault 帖子建议使用/etc/bashrc,但我个人建议创建/etc/shell_aliases文件(显然/etc/aliases 通过 sendmail 包已保留),并从您的用户和根用户.bashrc文件中获取它。这样您就可以全局重新定义别名。

替代方法如下AskUbuntu 帖子就是使用/etc/profile.d/00-aliases.sh

$ sudo bash -c 'echo alias print_hello=\"echo 'HELLO\ ASKUBUNTU'\" > /etc/profile.d/00-aliases.sh  ' 
$ sudo -i
$ print_hello
HELLO ASKUBUNTU

边注:对于 GUI shell ,您必须注销并登录,因为.profile每次登录时都会调用 ,而一旦您通过图形登录屏幕登录系统,它就会被调用,但只会调用一次。此后,所有打开的终端仿真器都被视为交互式 shell。

答案2

这对我有用。打开根.bashrc文件并编辑该bash_aliases函数。

改变:

if [ -f ~/.bash_aliases ]; then
    . ~/.bash_aliases
fi

if [ -f /home/[username]/.bash_aliases ]; then
    . /home/[username]/.bash_aliases 
fi

相关内容