manter aliases quando eu uso o sudo bash

9

Eu tenho um servidor Centos 5.5 que possui meus próprios comandos de alias para minha conta. Quando o faço sudo bash, ainda posso usar esses aliases, não precisei adicioná-los aos da raiz .bashrc.

Eu tenho outro servidor que é o Centos 6.5. Mas quando executo sudo bash, ele não usa meus apelidos do usuário no qual estou logado. Alguém sabe onde eu o configuro para incluir os aliases do usuário no qual estou conectado quando uso sudo bash?

Tyler Knotek
fonte
Acho aliases são herdadas através do ambiente, talvez por isso a resposta aqui vai funcionar: unix.stackexchange.com/questions/92998/...
Barmar
O 5.5 provavelmente preservou $ HOME do chamador, enquanto o 6.5 não. Veja a sudo sudo -Vsaída e env_keepna página do manual sudoers.
Stéphane Chazelas
1
Obrigado Barmar e Stephane. Sua resposta me apontou na direção certa. Eu tive que definir o seguinte em sudoers: Defaults !always_set_homee Defaults !env_reset`
Tyler Knotek

Respostas:

6

Adicione a seguinte linha ao seu ~ / .bashrc:

alias sudo='sudo '

No manual do bash

Os aliases permitem que uma sequência seja substituída por uma palavra quando é usada como a primeira palavra de um comando simples. O shell mantém uma lista de aliases que podem ser definidos e desabilitados com os comandos internos de alias e unalias.

A primeira palavra de cada comando simples, se não estiver entre aspas, é verificada para ver se possui um alias. Nesse caso, essa palavra é substituída pelo texto do alias. Os caracteres '/', '$', '' ',' = 'e qualquer um dos metacaracteres do shell ou caracteres de citação listados acima podem não aparecer em um nome alternativo. O texto de substituição pode conter qualquer entrada válida do shell, incluindo metacaracteres do shell. A primeira palavra do texto de substituição é testada para aliases, mas uma palavra idêntica a um alias sendo expandido não é expandida uma segunda vez. Isso significa que se pode, por exemplo, ls a "ls -F", por exemplo, e o Bash não tenta expandir recursivamente o texto de substituição. Se o último caractere do valor do alias for um espaço ou um caractere de tabulação, a próxima palavra de comando após o alias também será verificada quanto à expansão do alias.

Portanto, o Bash verifica apenas a primeira palavra de um comando em busca de um alias, quaisquer palavras depois disso não são verificadas. Isso significa que em um comando como sudo ll, apenas a primeira palavra (sudo) é verificada pelo bash para um alias, ll é ignorado. Podemos dizer ao bash para verificar a próxima palavra após o alias (por exemplo, sudo) adicionando um espaço ao final do valor do alias.

Antonizick
fonte
Funciona para o zsh também. Obrigado!
dzhi
Isso apenas permite usar aliases no sudocomando, por exemplo sudo some_alias ..., mas o OP está perguntando é como fazer com que aliases definidos para seu próprio usuário funcionem depois que ele alterna para outro usuário usando sudo. Digamos que eu tenha some_aliasdefinido. Quando eu sudoa rootuso sudo su, um novo ambiente é criado e que alias não é definido lá. Existe o -Eparâmetro do sudocomando que deve exportar o ambiente, mas parece que os aliases não fazem parte dele.
David Ferenczy Rogožan
0

Use sudo -E, que exportará seu ambiente.

kaboom
fonte
3
não inclui aliases (testado no Ubuntu 16.04.1)
Antonios Hadjigeorgalis 20/11
Está funcionando, mas apenas como sudo -E bash. Quando usado com suas sudo -E su, as coisas definidas no usuário .bashrc(aliases, prompt etc.) não são preservadas, mesmo que as variáveis ​​de ambiente sejam preservadas nos dois casos. Não tenho certeza de como exatamente isso está funcionando.
David Ferenczy Rogožan