Como fazer atalhos de alias para trabalho de terminal como root ou como exec?

2

Digamos que eu tenha um alias como este:

alias findip='wget -q -O - checkip.dyndns.org|sed -e 's/.*Current IP Address: //' -e 's/<.*$//''

a saída ficaria assim:

matthew@ubuntu:~$ findip
71.141.232.38
matthew@ubuntu:~$

Muito simples, ele encontra meu endereço IP conectando-se ao site e procurando meu endereço IP. Agora, se eu fosse correr:

tsocks wget -q -O - checkip.dyndns.org|sed -e 's/.*Current IP Address://' -e 's/<.*$//'

Eu teria uma saída assim:

matthew@ubuntu:~$ tsocks wget -q -O - checkip.dyndns.org|sed -e 's/.*Current IP Address: //' -e 's/<.*$//'
77.247.181.162
matthew@ubuntu:~$ 

Você notará que os endereços IP são diferentes. Isso é porque eu roteei o comando através de tsocks , que configurei para usar tor. Mas se eu fosse correr:

tsocks findip

Minha saída seria esta:

matthew@ubuntu:~$ tsocks findip
exec: 87: findip: not found
matthew@ubuntu:~$ 

Como eu configuro meu sistema para que os aliases criados se apliquem quando eu estiver executando através de tsocks?

    
por John Dorian 26.09.2011 / 00:08

1 resposta

2

Nomeie um comando para si mesmo e termine o alias com um espaço:

alias exec="exec "
alias sudo="sudo "
alias tsocks="tsocks "

Com isso, o bash expandirá automaticamente tsocks findiptsocks wget -q ...

Como visto na documentação do bash:

$ help alias
alias: alias [-p] [name[=value] ... ]
    ...
    A trailing space in VALUE causes the next word to be checked for
    alias substitution when the alias is expanded.

Isso, no entanto, não é relacionado a ser root (a menos que você estivesse falando sobre sudo usage), e não pode ser executado no nível syscall exec () aliases são inteiramente internos de bash ).

    
por 26.09.2011 / 00:40