簡體   English   中英

“git push origin master”在 bash 腳本中給出了奇怪的行為

[英]"git push origin master" gives weird behavior in bash script

我的 bashrc 文件中有這個簡單的函數

function aupgrade {
    cat ~/.bash_aliases > ~/bash/.bash_aliases
    cd ~/bash
    git add .

    if [[ $1 == "" ]]; then
        git commit -m "Update"
    else
        git commit -m "$1"
    fi

    git push origin master

    cd - 1>/dev/null
}

這個函數有一個目的,這是預期的行為:

首先,將 bash 存儲庫中 .bash_aliases 文件的內容替換為cat ~/.bash_aliases的標准輸出

其次,進入~/bash目錄,這是一個 git 存儲庫

、階段性變化

第四,如果在調用aupgrade函數時下面的參數沒有任何內容,只需提交“更新”消息,但如果用戶寫了一個參數,比如aupgrade "New commit!" , 使用諸如消息之類的參數提交更改, git commit -m $1

、推動變化

、回到上一目錄

但是,它不會那樣做,而是會那樣做:

首先,將 bash 存儲庫中 .bash_aliases 文件的內容替換為cat ~/.bash_aliases的標准輸出

其次,進入~/bash目錄,這是一個 git 存儲庫

、階段性變化

第四,盡管有爭論,但提交“更新”消息

、推動變化

、回到上一目錄

這很奇怪。 這看起來像是git push origin master line 的產物。 這不是條件問題,因為當我編寫另一個這樣的函數但沒有git push origin master line 時,它​​按預期工作。

為什么會發生這種情況? 有什么解決辦法嗎?

這就是 set -x 顯示給我的,這真的很奇怪設置 -x 的輸出

所以我測試了你的代碼,我能找到的唯一問題是將你的第一個參數作為帶有多個感嘆號的字符串傳遞會插入相同(或以前?)命令,除非你將它轉義:

在此處輸入圖片說明

看起來這正是您遇到的情況,但是您事先運行了“set -x”,因此它用該命令替換了雙感嘆號。

我還建議將函數參數存儲在命名的局部變量中以獲得更清晰的代碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM