Question Bash alias avec tuyauterie


Je ne sais pas exactement ce que je fais mal avec celui-ci. J'essaie de lancer la commande

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

Si je lance la commande

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

J'obtiens le résultat attendu, cependant, lorsque j'essaie de créer un alias avec la commande, j'obtiens

-bash: erreur de syntaxe à proximité d'un jeton inattendu `('

Toute aide serait appréciée. TIA.


4
2018-03-31 22:02


origine




Réponses:


Vous nichez des guillemets simples entre guillemets simples. Cela ne marche pas.

Essayez d'utiliser "double citation" dans l'expression intérieure.


5
2018-03-31 22:09



Ou échappé à des guillemets simples. - Benjamin Bannier
Merci beaucoup. Je savais que c'était quelque chose de simple, je le regardais trop longtemps. - n8felton
Vous ne pouvez pas échapper les guillemets simples dans une seule chaîne entre guillemets: gnu.org/software/bash/manual/bashref.html#Single-Quotes - glenn jackman


Je l'ai trouvé une solution beaucoup plus propre pour créer une fonction et nommer votre alias après la fonction, comme ceci:

alias localip=GetLocalIP

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

6
2017-10-10 19:04



Quel est l'avantage de créer un alias pour une fonction, plutôt que de simplement nommer la fonction localip? Également function Le mot clé casse la compatibilité avec d'autres shells. Je suggère de simplement utiliser localip() { ... - Tom Fenech