2012-06-09 4 views
0

Я хочу использовать как bash-псевдоним, так и функцию bash с несколькими аргументами. Я эмулирую подкоманды svn.Bash-псевдоним и функция bash с несколькими аргументами

$ svngrep -nr 'Foo' . 
$ svn grep -nr 'Foo' . 

Я ожидаю, как действовать, как показано ниже:

grep --exclude='*.svn-*' --exclude='entries' -nr 'Foo' . 

Но актуальна, только псевдоним ('svngrep') делает хорошо, функция ('СВН Grep') вызывает ошибку недопустимый вариант. Как написать мой .bashrc?

#~/.bashrc 

alias svngrep="grep --exclude='*.svn-*' --exclude='entries'" 

svn() { 
    if [[ $1 == grep ]] 
then 
    local remains=$(echo [email protected] | sed -e 's/grep//') 
    command "$svngrep $remains" 
else 
    command svn "[email protected]" 
fi 
} 

ответ

2

Вы хотите shift удалить первое слово из позиционных параметров: это сохраняет массив, как природа "[email protected]".

svn() { 
    if [[ $1 = grep ]]; then 
    shift 
    svngrep "[email protected]" 
    else 
    command svn "[email protected]" 
    fi 
} 

С [[ встроенной команды в Bash, холостая = используется для струнного равенства и двойной == используется для сопоставления с образцом - вам нужно только бывший в этом случае.

0

svngrep не является переменной. Это псевдоним, используемый bash. Поэтому необходимо создать новую переменную как:

svngrep_var="grep --exclude='*.svn-*' --exclude='entries'" 

И использовать его в вашем фрагменте кода:

... 
command "$svngrep_var $remains" 
... 
0

Я вновь фактор это сам. И работайте отлично! Благодаря!

#~/.bashrc 
alias svngrep="svn grep" 
svn() { 
if [[ $1 == grep ]] 
then 
    local remains=$(echo $* | sed -e 's/grep//') 
    command grep --exclude='*.svn-*' --exclude='entries' $remains 
else 
    command svn $* 
fi 
} 

I выбор Я сохраняю псевдоним простым. И я использую $ * вместо $ @.

Отредактировано: 2012-06-11

#~/.bashrc 
alias svngrep="svn grep" 
svn() { 
    if [[ $1 = grep ]] 
    then 
    shift 
    command grep --exclude='*.svn-*' --exclude='entries' "[email protected]" 
    else 
    command svn "[email protected]" 
    fi 
} 
+1

См. [BashFAQ/050] (http://mywiki.wooledge.org/BashFAQ/050), [Цитаты] (http://mywiki.wooledge.org/Quotes) и [Специальные параметры] (http: //mywiki.wooledge.org/BashSheet#Special_Parameters). –

+0

Это будет очень хрупким; прочитайте ссылки Dennis, а затем используйте решение @ glenn. –

+0

Спасибо, я понимаю уловки между $ * и $ @. И я должен использовать doublequated $ @, как «$ @». – sanemat

Смежные вопросы