当我使用sudo bash时保持别名


9

我有一台Centos 5.5服务器,该服务器具有自己的帐户别名命令。完成后,sudo bash我仍然可以使用这些别名,而不必将别名添加到根目录的.bashrc

我还有另一台Centos 6.5服务器。但是,当我执行时sudo bash,它将不会使用我作为登录用户的别名。有谁知道我在哪里配置它以包括我使用时登录的用户的别名sudo bash


我认为别名是通过环境继承的,所以也许这里的答案会起作用:unix.stackexchange.com/questions/92998/…– Barmar 2014
6

5.5可能会保留来自调用方的$ HOME,而6.5则不会。请参见sudo sudo -V输出和env_keepsudoers手册页。
斯特凡Chazelas

1
感谢Barmar和Stephane。您的两个回答都为我指明了正确的方向。我必须在sudoers中设置以下内容:Defaults !always_set_homeDefaults !env_reset`
Tyler Knotek 2014年

Answers:


6

将以下行添加到〜/ .bashrc中:

alias sudo='sudo '

从bash手册

别名允许将字符串替换为简单命令的第一个单词时使用该单词。Shell维护一个别名列表,可以使用alias和unalias内置命令来设置和取消设置别名。

如果没有引号,则检查每个简单命令的第一个单词,以查看其是否具有别名。如果是这样,该词将被别名文本替换。字符“ /”,“ $”,“`”,“ =”以及上面列出的任何外壳程序元字符或引号可能不会出现在别名中。替换文本可以包含任何有效的shell输入,包括shell元字符。测试替换文本的第一个单词是否具有别名,但是与被扩展的别名相同的单词不会第二次扩展。例如,这意味着可以将ls别名为“ ls -F”,并且Bash不会尝试递归扩展替换文本。如果别名值的最后一个字符是空格或制表符,则还将检查别名后面的下一个命令字以进行别名扩展。

因此,Bash仅检查命令的第一个单词是否有别名,之后的任何单词都不会被检查。这意味着在类似sudo ll的命令中,bash仅检查第一个单词(sudo)是否具有别名,而ll将被忽略。我们可以通过在别名值的末尾添加一个空格来告诉bash检查别名之后的下一个单词(即sudo)。


同样适用于zsh。谢谢!
dzhi

sudo例如sudo some_alias ...,这仅允许在命令中使用别名,但是OP要求的是在他使用切换到另一个用户后如何使为其自己的用户定义的别名起作用sudo。假设我已经some_alias定义了。当我sudoroot使用sudo su,创建一个新的环境和别名没有定义。-Esudo命令的参数应该导出环境,但看起来别名不是其中的一部分。
David FerenczyRogožan19年

0

使用sudo -E,这将导出您的环境。


3
不包含别名(在Ubuntu 16.04.1上测试)
Antonios Hadjigeorgalis

它正在工作,但仅作为sudo -E bash。与suas一起使用时,即使看起来在两种情况下都保留了环境变量,也不会保留sudo -E su用户定义的内容.bashrc(别名,提示等)。我不确定这到底是如何工作的。
David FerenczyRogožan,19年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.