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

2

Digamos que eu tenho 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 executar:

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

Gostaria de obter uma saída como esta:

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 ocorre porque eu direcionei o comando através do tsocksqual configurei para usar o tor. Mas se eu fosse correr:

tsocks findip

Minha saída seria esta:

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

Minha saída

Como configuro meu sistema para que os aliases criados se apliquem quando estou executando tsocks?

John Dorian
fonte

Respostas:

2

Alias ​​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 será expandido automaticamente tsocks findiptsocks wget -q ...

Como visto na documentação do bash:

alias $ help
alias: alias [-p] [nome [= valor] ...]
    ...
    Um espaço à direita em VALUE faz com que a próxima palavra seja verificada
    substituição de alias quando o alias é expandido.

Isso, no entanto, não está relacionado ao fato de ser root (a menos que você esteja falando sobre sudouso) e não pode ser feito no nível exec () syscall (os alias são totalmente internos para bash).

gravidade
fonte