2017-07-25 1 views
1

-je utiliser la commande vraiment souvent:Comment créer un alias shell avec des arguments?

ack searchexpre -l --print0 | xargs -0 -n 1 sed -i -e sedexpression 

Je voudrais créer un alias comme:

searchandreplace searchexpre sedexpression 

Comment puis-je faire?

+1

BTW - s'il vous plaît marquer bash * ou * zsh * ou * sh, mais pas deux ou trois de ceux-ci à la fois. Ce sont des coquilles différentes, non mutuellement compatibles (sauf que bash est * presque * un surensemble de POSIX sh mais pour son implémentation 'echo' non conforme), et alors que dans ce cas particulier il y a une seule réponse qui fonctionne pour tous d'entre eux, (1) ce n'est pas toujours vrai, et (2) l'excès de marquage signifie que quelqu'un doit tester chaque réponse dans plusieurs coquilles pour évaluer l'exactitude de cette réponse. –

+0

Copie possible de [Créer un alias Bash qui prend un paramètre?] (Https://stackoverflow.com/questions/7131670/make-a-bash-alias-that-takes-a-parameter) – codeforester

+0

Vous devriez également envisager d'utiliser ag au lieu d'ack c'est environ 10x plus rapide dans mes tests; https://github.com/ggreer/the_silver_searcher –

Répondre

6

La règle de base avec des alias est que si vous devez demander, vous devez utiliser une fonction à la place:

searchandreplace() { 
    ack "$1" -l --print0 | xargs -0 -n 1 sed -i -e "$2" 
} 

Vous pouvez maintenant appeler searchandreplace searchexpre sedexpression

+0

est-il possible de donner un nom au paramètre? comme doint searchandreplace (arg1, arg2) {....}? – Fractale

+1

Non, 'sh' et' bash' ne supportent pas les paramètres nommés. Vous pouvez assigner '$ 1' et' $ 2' aux variables avec les noms que vous voulez –