2017-07-25 64 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'分配給您想要的任何名稱的變量 –