繁体   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