我习惯使用sudo -i
并且没有root
设置密码,iesu -
不起作用。我正在寻找一种方法来在用户 shell(例如,当我以登录显示管理器的用户身份启动bash
时打开的 shell)和 所打开的 shell 之间共享别名。gnome-terminal
sudo -i
据我所知man sudo
,它是一个登录 shell,它应该是源~/.profile
,即/root/.profile
,但输入别名/root/.profile
不起作用。只有当我在别名bash
打开的 shell 中运行时才sudo -i
可用。根据/etc/passwd
root
的 shell 是bash
和SHELL
变量确认(在由启动的 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