Uma questão de usar aspas duplas e aspas simples onde é importante:
alias lsa="ls -l | awk '{print \}' "
sudo ifconfig wlan0 | grep 'inet addr:' | cut -d: -f2 | awk '{ print $1}'
O comando acima, quando executado a partir do terminal, gera o endereço IP "interno" correto. Quando tento passar como alias como:
alias intip='sudo ifconfig wlan0 | grep 'inet addr:' | cut -d: -f2 | awk '{ print $1}''
Estou recebendo o seguinte erro:
alias: addr: | cut -d: -f2 | awk { not found
alias: print not found
alias: } not found
O que estou fazendo de errado aqui?
O que você está fazendo de errado é usar um alias para algo que é mais complicado do que dar um nome mais curto a um comando ou passar parâmetros para um comando automaticamente. Use uma função e você não terá que se preocupar com citações.
intip () {
/sbin/ifconfig wlan0 | grep 'inet addr:' | cut -d: -f2 | awk '{ print $1}'
}
Note que você não precisa de sudo aqui, ifconfig
não precisa de privilégios quando você está apenas procurando. Mas em muitas distribuições você precisa fornecer o caminho completo, pois ifconfig
geralmente não está no padrão PATH
para usuários não-root.
A propósito, você pode fazer sua filtragem inteiramente no awk, mas fique à vontade para usar várias ferramentas se você estiver mais confortável assim. Aqui está uma maneira:
intip () {
/sbin/ifconfig wlan0 | awk 'sub(/^.*inet addr:/,"") {sub(/ .*/,""); print}'
}
Você pode facilmente tornar o nome da interface um parâmetro opcional da função.
intip () {
/sbin/ifconfig "${1:-wlan0}" |
awk 'sub(/^.*inet addr:/,"") {sub(/ .*/,""); print}'
}
Só para mostrar por que seu alias não funciona: você tem aspas simples para delimitar o alias e dentro do texto do alias. O intérprete não pode ler sua mente e ver quais foram feitos para serem quais. Veja Chamando bash de sh (dash) com comandos lidos de args, e "Cadeia entre aspas não terminada" / "EOF inesperado" para alguns casos de citações entre citações e Por que echo está ignorando meus caracteres de aspas? para saber como incluir efetivamente uma única citação em um único caractere string entre aspas digitando os quatro caracteres '\''
.
Ou você pode instalar moreutils
(pelo menos, se estiver disponível para sua distro) e usar ifdata
.
$ ifdata -pa br0
172.16.1.244
Você usaria wlan0 em vez de br0, é claro.