Я добавил следующую строку в файл "~ / .bash_aliases":
alias svngrep='grep -R $1 ./* --exclude-dir ".svn"'
, но она не работает.
Он выводит (в моем переводе на английский):
svngrep test
grep: test: File or directory not found
Но с полной строкой "grep" он работает просто отлично.
Есть идеи, что случилось с моим псевдонимом?
Вам не нужна функция bash (хотя вы можете использовать ее, по вкусу), просто удалите $1 ./*
из вашего примера и назовите его так:
alias svngrep='grep -R --exclude-dir ".svn"'
svngrep phrase .
или вот Например, я использовал в течение нескольких месяцев:
alias rg='rgrep --exclude-dir=.svn --exclude=*.pyc'
rg phrase .
Конечно, вы можете заменить .
на любой каталог. Я бы сказал, что использование псевдонимов более интуитивно понятно, псевдоним - это псевдоним, функция может делать все что угодно.
$1
не работает в псевдониме. Для этого вам нужно определить функцию, например, в вашем файле .bashrc.
function svngrep { grep -R --exclude-dir=".svn" "$@" . ; }
Это должно сработать! Тем не менее, убедитесь, что ваш старый псевдоним отсутствует, прежде чем пробовать его из командной строки:
unalias svngrep
function svngrep { grep -R --exclude-dir=".svn" "$@" . ; }
svngrep "teststring"
Цитировать bash manual :
нет механизма использования аргументов в тексте замены. Если нужны аргументы, следует использовать функцию оболочки (...) Почти для всех целей псевдонимы заменяются функциями оболочки .
BLOCKQUOTE>