2015-12-03 3 views
1

У меня есть эта функция, чтобы сделать его simpeler для меня, чтобы нажать на git. Он отлично работает с нажатием без аргументов, однако, когда я передаю параметр функции, я получаю -bash: parameter: command not found. Насколько я знаю, я правильно звоню в функцию.bash see parameter as function

function gitPush { 
    if ($1) 
    then 
    if ($2) 
    then 
    git push $2 $1 
    else 
    git push origin $1 
    fi 
    else 
    git push origin master 
    fi 
} 

Когда я называю его с помощью gitPush он работает нормально, однако gitPush branch не работает.

Я хотел бы знать, что я делаю неправильно и как это исправить.

Я не знаю, если это влияет на выполнение функции (надейтесь нет), но я использую Putty

ответ

4

($1) не делает то, что вы думаете, он делает - это пытается выполнить команду, хранящуюся в первом аргументе, в подоболочке.

Чтобы проверить наличие аргумента, вы можете использовать следующее:

if [[ -n $1 ]] 

Или просто сосчитать аргументы, вы можете использовать следующее:

if [[ $# -eq 1 ]] 
+0

Спасибо, это объясняет, что я делаю неправильно. – Jelmergu

3

Я думаю, вы могли бы сделать это намного короче:

function gitPush { 
    local remote=${2:-origin} 
    local branch=${1:-master} 
    git push "${remote}" "${branch}" 
} 

Но все-все-это, вероятно, не то, ant использовать в любом случае.

в вашем .gitconfig вы могли бы добавить:

[push] 
default = tracking 

Таким образом Wou всегда будет подталкивать к гусеничной пульта дистанционного управления в текущей ветке, если не поставить аргументы.

+0

Спасибо, что показали мне более короткий способ написания моей функции. Хотя это не ответ на вопрос, что я делаю неправильно, я думаю, что буду использовать этот вариант, чтобы переписать функцию, которую у меня есть. Я также рассмотрю файл '.gitconfig' – Jelmergu

+1

@Tom Fenech: true, отредактирован и добавлен« local ». – marcolz

+0

@Jelmergu: ну, вы не должны отмечать этот «git» в первую очередь, поскольку это основная ошибка сценария оболочки; git не имел к этому никакого отношения. ;-) Но так как вы это сделали, я думал, что я все равно отвечу. ;-) – marcolz