web-dev-qa-db-fra.com

commande bash alias avec des guillemets simples et doubles

J'ai cette commande qui fait ce que je veux mais je ne peux pas l'aliaser dans mon .bashrc (notez qu'elle utilise des guillemets simples et doubles):

svn status | awk '$1 =="M"{print $2;}'

J'ai essayé:

alias xx="svn status | awk '$1 ==\"M\"{print $2;}'"

Et quelques autres combinaisons de bon sens sans chance .. Je sais que bash est très difficile avec des citations .. Alors, quelle est la bonne façon de l'aliaser et pourquoi? Merci

61

Vous avez juste besoin de lui échapper correctement.

alias xxx="svn status | awk '\$1 ==\"M\"{print \$2;}'"
69
ffledgling

Voici quelque chose qui accomplit la même chose sans utiliser d'alias. Mettez-le dans une fonction dans votre .bashrc:

xx() {
    svn status | awk '$1 =="M"{print $2;}'
}

De cette façon, vous n'avez pas à vous soucier d'obtenir les bons devis. Cela utilise exactement la même syntaxe que vous utiliseriez sur la ligne de commande.

67
EJK

Il y a une troisième façon (j'ai trouvé plus facile) à côté d'utiliser une fonction ou d'échapper à la manière dont @ffledgling l'a fait: utiliser la syntaxe littérale des chaînes ( voici une excellente réponse ).

Ainsi, par exemple, si vous ne voulez pas créer un alias de ce onliner cela finira par être:

alias snap-removedisabled=$'snap list --all | awk \'$5~"disabled"{print $1" --revision "$3}\' | xargs -rn3 snap remove'

Il vous suffit donc d'ajouter le $ devant la chaîne et échapper aux guillemets simples.

1
Pablo Bianchi