2015-12-03 58 views
1

我有這個函數讓我更容易推到git。它可以在沒有參數的情況下正常工作,但是當我將一個參數傳遞給函數時,我得到-bash: parameter: command not found。據我所知,我正確地調用該函數。bash看到參數作爲函數

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不起作用。

我想知道我做錯了什麼,以及如何解決它。

我不知道這是否會影響該函數的執行(不預期),但我使用的膩子

回答

4

($1)沒有做什麼你認爲它 - 它正試圖執行存儲命令在第一個參數中,在一個子shell中。

爲了測試一個參數是否存在,你可以使用以下命令:

if [[ -n $1 ]] 

或者簡單地算參數,可以使用以下命令:

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

謝謝,這解釋了我做錯了什麼。 – Jelmergu

3

我猜你可能做這個很短很多:

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

但總而言之,這可能不是你想w反正使用螞蟻。

.gitconfig您可以添加:

[push] 
default = tracking 

這樣WOU總是推到如果不提供參數當前分支的跟蹤遙控器。

+0

感謝您向我展示寫作功能的較短途徑。雖然這不是問題的答案,但我認爲我會用這個選項來重寫我所擁有的功能。我還會看看我的'.gitconfig'文件 – Jelmergu

+1

@Tom Fenech:true,編輯並添加「local」。 – marcolz

+0

@Jelmergu:好吧,你不應該首先標記這個「git」,因爲它是一個基本的shell腳本錯誤; git與此無關。 ;-)但是既然你做了,我想我會回答的;-) – marcolz