Eu tenho um alias que passa em alguns parâmetros para uma ferramenta que eu uso frequentemente. Às vezes eu corro como eu, às vezes no sudo. Infelizmente, é claro, o sudo não reconhece o apelido.
Alguém tem uma dica de como passar o alias?
Nesse caso, tenho várias opções para perl quando estou depurando:
alias pd='perl -Ilib -I/home/myuser/lib -d'
Às vezes, tenho que depurar minhas ferramentas como root, portanto, em vez de executar:
pd ./mytool --some params
Eu preciso executá-lo no sudo. Eu tentei de várias maneiras:
sudo eval $(alias pd)\; pd ./mytool --some params
sudo $(alias pd)\; pd ./mytool --some params
sudo bash -c "$(alias pd)\; pd ./mytool --some params"
sudo bash -c "$(alias pd); pd ./mytool --some params"
sudo bash -c eval\ "$(alias pd)\; pd ./mytool --some params"
sudo bash -c eval\ "'$(alias pd)\; pd ./mytool --some params'"
Eu esperava uma maneira agradável e concisa de garantir que meu alias de pd atual fosse totalmente usado (caso precise ajustá-lo mais tarde), embora algumas de minhas tentativas não fossem concisas. Meu último recurso é colocá-lo em um script shell e colocá-lo em algum lugar que o sudo possa encontrar. Mas, às vezes, aliases são muuuuito úteis, por isso é um último recurso.
A trailing space in value causes the next word to be checked for alias substitution when the alias is expanded.
sudo
novo, enquanto querendo manter essesudo
truque -passthrough ao mesmo tempo. Mesmo isso pode ser feito: para usar as opções novamente, use\sudo
. A barra invertida substituirá o alias. (Muitos parecem não saber disso). Dessa forma, você pode ( perigo! ) Até remover arquivos sem nenhum aviso, substituindo oalias rm='rm -i'
normalmente especificado em.bash-aliases
, simplesmente digitando\rm file-to-delete
.Não sou muito claro sobre o que você está tentando fazer. Eu posso ver duas maneiras:
O Caminho Certo
alias pd='sudo perl -Ilib -I/home/myuser/lib -d'
A execução
pd ./mytool
executará seu comando de depuração como root, mas ainda preservará os benefícios do sudo (trilha de auditoria, não operando com um shell raiz).Exemplo:
O caminho fácil
Adicione os aliases ao root
.bashrc
e usesudo -i
sempre que você sudo fizer root.fonte
Apenas tenha dois apelidos e use uma variável
Não vejo o motivo do uso
awk
ou acut
menos que ele tenha apenas o alias principal definido uma vez para facilitar a modificação. Se for esse o caso, isso funciona:Aqui está uma função simplista para criar pares de alias como o acima:
Usar:
Agora você tem
pd
espd
maisct
esct
.fonte
Eu gostaria de poder marcar duas respostas como "corretas". Combinando o caminho certo a partir do post insyte de, hum, perspicaz, com a solução awk (ou corte) de Bill Weiss , eu vim com isso:
Agora vou colocar isso em uma função shell no meu .bashrc ou algo assim e depois criar versões "s" de todos os meus aliases que desejo executar como root.
Atualização : pequena modificação da função simplista de Dennis Williamson para facilitar um pouco o uso:
Isso significa que eu apenas tenho que colocar "s" na frente de todo o comando. Ao invés de:
Eu apenas adiciono os s na frente.
E eu terminei. Claro, o computador trabalha um pouco mais, mas é para isso que serve um computador. :-)
Obrigado!
fonte
alias sudo="sudo "
funciona perfeito.de http://www.shellperson.net/using-sudo-with-an-alias/
fonte
Não seria mais fácil simplesmente hackear um script que inclui suas opções e colocá-lo em algum lugar de uma das pastas que é o caminho para a conta e a raiz comuns? Realmente não seria preciso muito script.
fonte
Isso é difícil, mas funciona aqui:
fonte
Adicione um prefixo "sudo" aos aliases AND comandos selecionados de dentro da sua
~/.bashrc
maneira:fonte
alias sudo="sudo "
é mais fácil.Conforme publicado algumas vezes, faça em '.bashrc':
alias sudo = 'sudo'
A razão pela qual é explicada em 'man bash' e 'help alias':
alias: alias [-p] [name [= value] ...] Defina ou exiba aliases.
fonte
Você quer algo assim:
fonte
bash -i
(i = interativo) é apenas a v4.0. Portanto, em um servidor mais antigo que aindabash
executava a v3, isso provavelmente falharia. Mas me provar que estou errado, qualquer um, vá em frente;)-i
é shell Bourne, consulte: pubs.opengroup.org/onlinepubs/009695399/utilities/sh.html#!/bin/bash -i
depois do shebang, que aparentemente não é o mesmo (?). Para cortar uma longa história curta, usandohistory
em umbash
roteiro (e não na linha de comando "ao vivo") vai exigir a-i
opção, que eu era incapaz de começar a trabalhar em um servidor com "apenas"bash
v3 instalado. E isso é um fato.Não sei se é a coisa mais sábia a se fazer em uma caixa de produção, mas localmente eu uso
fonte
Você pode adicionar o alias ao .bashrc do root ou apenas executar .bashrc através do sudo antes do seu comando?
fonte