2017-07-25 67 views
1

我用命令确实经常:如何用args创建shell别名?

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

我想创建这样一个别名:

searchandreplace searchexpre sedexpression 

我可怎么办呢?

+1

BTW - 请标记庆典*或* zsh *或* sh,但不能同时使用两个或三个。它们是不同的shell,彼此不兼容(除非bash几乎是POSIX sh的超集,但是因为其不合规的'echo'实现),而在这种特殊情况下,有一个适用于所有(1)并非总是如此,(2)多余的标记意味着有人需要测试多个shell中的每个答案以评估答案的正确性。 –

+0

可能重复的[使一个Bash别名需要一个参数?](https://stackoverflow.com/questions/7131670/make-a-bash-alias-that-takes-a-parameter) – codeforester

+0

你应该也考虑使用ag,而不是ack,在我的测试中速度快了10倍; https://github.com/ggreer/the_silver_searcher –

回答

6

与别名经验法则是,如果你要问,你应该用一个函数:

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

现在,您可以拨打searchandreplace searchexpre sedexpression

+0

有什么办法给参数命名?像doint searchandreplace(arg1,arg2){....}? – Fractale

+1

不,'sh'和'bash'不支持命名参数。您可以将'$ 1'和'$ 2'分配给您想要的任何名称的变量 –