Обычно в моем bashrc есть следующий простой псевдоним:
alias g="grep --color=always --exclude-dir=\*.svn\*"
но теперь мне приходится работать на системах, в которых есть только GNU grep 2.5, поэтому --exclude-dir
спорить не о чем.
Теперь мне нужно что-то вроде этого для работы:
alias g="grep --color=always $1 $2 | grep -v .svn"
но, конечно, аргументы добавляются в конец псевдонима. $1 и $2 анализируются при создании псевдонима, а не при его вызове, даже при наличии сильных кавычек.
Можно ли решить эту проблему, не прибегая к дополнительным скриптам или функциям?
решение1
Нет, не можете. Как гласит руководство по bash:
Механизма использования аргументов в тексте замены, как в `csh', нет. Если аргументы необходимы, следует использовать функцию оболочки (*примечание Функции оболочки::).
Функции — это то, что нужно для этого, и их можно так же легко написать, как псевдоним. В этом случае это может быть
function g () { grep --color=always "$1" "$2" | grep -v .svn ; }