8

I have a Centos 5.5 server that has my own alias commands for my account. When I do "sudo bash" I can still use those aliases, I didn't have to add the aliases to the root bashrc.

I have another server that is Centos 6.5. But when I sudo bash it will not use my aliases of the user that I'm logged in as. Does anyone know where I configure it to include the aliases of the user I am logged into when I use sudo bash?

  • I think aliases are inherited via the environment, so maybe the answer here will work: unix.stackexchange.com/questions/92998/… – Barmar Jun 25 '14 at 20:57
  • The 5.5 one probably preserved $HOME from the caller, while 6.5 doesn't. See sudo sudo -V output and env_keep in the sudoers man page. – Stéphane Chazelas Jun 25 '14 at 21:38
  • Thanks Barmar and Stephane. Both your answer pointed me in the right direction. I had to set the following in sudoers: Defaults !always_set_home and Defaults !env_reset ` – Tyler Knotek Jun 26 '14 at 0:54
5

Add the following line to your ~/.bashrc:

alias sudo='sudo '

From the bash manual

Aliases allow a string to be substituted for a word when it is used as the first word of a simple command. The shell maintains a list of aliases that may be set and unset with the alias and unalias builtin commands.

The first word of each simple command, if unquoted, is checked to see if it has an alias. If so, that word is replaced by the text of the alias. The characters ‘/’, ‘$’, ‘`’, ‘=’ and any of the shell metacharacters or quoting characters listed above may not appear in an alias name. The replacement text may contain any valid shell input, including shell metacharacters. The first word of the replacement text is tested for aliases, but a word that is identical to an alias being expanded is not expanded a second time. This means that one may alias ls to "ls -F", for instance, and Bash does not try to recursively expand the replacement text. If the last character of the alias value is a space or tab character, then the next command word following the alias is also checked for alias expansion.

So Bash only checks the first word of a command for an alias, any words after that are not checked. That means in a command like sudo ll, only the first word (sudo) is checked by bash for an alias, ll is ignored. We can tell bash to check the next word after the alias (i.e sudo) by adding a space to the end of the alias value.

  • Works for zsh as well just fine. Thank you! – dzhi Jan 19 at 13:18
0

Use sudo -E, which will export your environment.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.