Как сделать это & ​​ldquo; svngrep & rdquo; псевдоним работает на & ldquo; .bash_aliases & rdquo ;?

Я добавил следующую строку в файл "~ / .bash_aliases":

alias svngrep='grep -R $1 ./* --exclude-dir ".svn"'

, но она не работает.

Он выводит (в моем переводе на английский):

svngrep test
grep: test: File or directory not found

Но с полной строкой "grep" он работает просто отлично.

Есть идеи, что случилось с моим псевдонимом?

0
задан 17 September 2012 в 18:10

2 ответа

Вам не нужна функция bash (хотя вы можете использовать ее, по вкусу), просто удалите $1 ./* из вашего примера и назовите его так:

alias svngrep='grep -R --exclude-dir ".svn"'
svngrep phrase .

или вот Например, я использовал в течение нескольких месяцев:

alias rg='rgrep --exclude-dir=.svn --exclude=*.pyc'
rg phrase .

Конечно, вы можете заменить . на любой каталог. Я бы сказал, что использование псевдонимов более интуитивно понятно, псевдоним - это псевдоним, функция может делать все что угодно.

0
ответ дан 17 September 2012 в 18:10

$1 не работает в псевдониме. Для этого вам нужно определить функцию, например, в вашем файле .bashrc.

function svngrep { grep -R --exclude-dir=".svn" "$@" . ; }

Это должно сработать! Тем не менее, убедитесь, что ваш старый псевдоним отсутствует, прежде чем пробовать его из командной строки:

unalias svngrep
function svngrep { grep -R --exclude-dir=".svn" "$@" . ; }
svngrep "teststring"

Цитировать bash manual :

нет механизма использования аргументов в тексте замены. Если нужны аргументы, следует использовать функцию оболочки (...) Почти для всех целей псевдонимы заменяются функциями оболочки .

0
ответ дан 17 September 2012 в 18:10

Другие вопросы по тегам:

Похожие вопросы: