как поместить мои аргументы в команду псевдонима Bash?

2033
gcb

у меня обычно есть следующий простой псевдоним в моем 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 анализируются, когда псевдоним создается не тогда, когда он вызывается, даже с сильными кавычками.

Могу ли я решить эту проблему, не прибегая к дополнительным сценариям или функциям?

3

1 ответ на вопрос

7
Alan Shutko

Нет, ты не можешь. Как говорится в руководстве по bash:

Нет механизма для использования аргументов в тексте замены, как в `csh '. Если требуются аргументы, следует использовать функцию оболочки (* обратите внимание на функции оболочки: :).

Функции - это то, что нужно, и их так же легко написать, как псевдоним. В этом случае это может быть

function g () { grep --color=always "$1" "$2" | grep -v .svn ; } 
+1 Безопаснее цитировать позиционные параметры. glenn jackman 11 лет назад 2
Очень верно. Отредактировано, чтобы исправить это. Alan Shutko 11 лет назад 0