2010-04-12 14 views
13

skończę pisanieJak napisać alias dla grep -R?

grep -Rni pattern . 

i strasznie dużo. Jak zrobić to pod aliasem jak

alias gr='grep -Rni [email protected] .' 

Running że otrzymujemy:

$ gr pattern 
grep: pattern: No such file or directory 

Choć alias wygląda dobrze:

$ type gr 
gr is aliased to `grep -R [email protected] .' 

Wydaje się, że $ @ i. zamieniać się, gdy jest faktycznie wykonywany.

+2

To nie jest "$ @" i "." są zamieniane na zmienne - ich wartość "$ @" nie jest zastępowana (powoduje, że jest pusta ""), a "wzór" jest dodawany na końcu linii. Twoja komenda staje się "grep -Rni. wzór'. –

Odpowiedz

6

utworzyć funkcję zamiast aliasu. Zapisać go w pliku np mylibrary.sh i kiedy chcesz korzystać z funkcji, źródło plik

np mylibrary.sh

myfunction(){ 
grep -Rni ... 
} 

#!/bin/bash 
source mylibrary.sh 
myfunction 
+0

słodki! jakikolwiek pomysł, dlaczego musi to być funkcja zamiast aliasu? – numerodix

+1

Wewnątrz funkcji można wykonać wiele innych czynności. np. Kontrola przepływu. możesz także przekazywać argumenty do funkcji. Nie jest to łatwe z aliasami. Zasadniczo użyj aliasu, jeśli twoje polecenia są krótkie i proste, w przeciwnym razie użyj funkcji. – ghostdog74

22

Spróbuj tego:

$ alias gr='grep -Rnif /dev/stdin . <<<' 
$ gr pattern 
./path/file:42: here is the pattern you were looking for 

Działa to również:

$ alias gr='grep -Rnif - . <<<' 
+1

+1 dla tutaj ciąg fu. –

+0

Wow! To jest fajne. – sixtyfootersdude

+0

Czy niektóre lub wszystkie z '-. <<< 'pasuje do flagi' -f'? –