Questão Bash alias com tubulação


Eu não sei exatamente o que estou fazendo de errado com isso. Estou tentando executar o comando

alias localip='ip -4 -o addr show eth0 | egrep -o '([[:digit:]]{1,3}\.){3}[[:digit:]]{1,3}' | head -n 1'

Se eu executar o comando

ip -4 -o addr show eth0 | egrep -o '([[:digit:]]{1,3}\.){3}[[:digit:]]{1,3}' | head -n 1

Eu recebo o resultado que eu esperava, no entanto, ao tentar criar um alias com o comando, recebo

-bash: erro de sintaxe próximo do token inesperado `('

Qualquer ajuda seria apreciada. TIA.


4


origem




Respostas:


Você está aninhando aspas simples entre aspas simples. Isso não funciona.

Tente usar "aspas duplas" na expressão interna.


5



Ou escapou aspas simples. - Benjamin Bannier
Obrigado muuuuito muito. Eu sabia que era algo simples, eu só estava olhando para isso por muito tempo. - n8felton
Você não pode escapar de aspas simples dentro de uma única string entre aspas: gnu.org/software/bash/manual/bashref.html#Single-Quotes - glenn jackman


Eu achei uma solução muito mais limpa apenas para criar uma função e nomear seu alias após a função, assim:

alias localip=GetLocalIP

function GetLocalIP()
{
   ip -4 -o addr show eth0 | egrep -o '([[:digit:]]{1,3}\.){3}[[:digit:]]{1,3}' | head -n 1
}

6



Qual é a vantagem de criar um alias para uma função, em vez de apenas nomear a função localip? Também o function A palavra-chave quebra a compatibilidade com outros shells. Eu sugiro apenas usando localip() { ... - Tom Fenech