2013-02-06 21 views
0

我有了這個別名:Linux別名,它有什麼問題?

alias gi='grep -r -i $1 ./*' 

當我這樣做

gi someString 

它確實grep的,但在其他一些字符串比我提供,通常有一個「P /或其他這樣的事情在它

我使用grepping歷史類似的東西:

alias gh='history | grep $1' 

這是完美的作品。

編輯:我在/ bin/bash shell中,按照echo $ SHELL。

謝謝!

+0

您應該共享您正在使用的外殼。 – alroc

+0

謝謝你,完成。 – Nathaniel

+0

*別名*只是您特定的shell內置命令。你正在使用的* shell *可能是* bash *。這實際上並不重要,因爲* alias *是Posix,答案適用於任何Posix shell。 – DigitalRoss

回答

2

alias機制只是替代一個詞。任何其他在同一行上的單詞留在原地,所以通常只替換命令並留下參數。這不適用於您的grep示例,因爲您要重新排列該行。

現在,$1將指外殼進程(或殼函數)的參數,在這兩種情況下,不爲鍵入在同一行上的話。

在這種情況下,您可以更好地使用shell 函數,它應該可以在包括bash的任何Posix shell上工作。

gi() { 
    grep -r -i "$1" ./* 
} 
+0

非常感謝您的幫助! – Nathaniel

0

試試這個別名:

alias gi='find . | xargs grep -i' 

如果您仍然只想用別名來解決問題,這將工作。

1

你不能參數傳遞給alias,請參閱this post的詳細資料。你需要的是一個功能。試一下就行了:

function gi() { 
grep -r -i "$1" ./* 
} 

希望這會有所幫助!

P.S .:至於爲什麼alias gh='history | grep $1'的作品是因爲它與alias gh='history | grep相同。當設置alias靜態時,將擴展$1

+0

感謝您的鏈接。上投票,但挖掘打敗你的實際答案;-) – Nathaniel

+0

@Nathaniel:不是一個問題,他的答案實際上解釋了更多:) –