bash 中的 grom() 关键字抛出意外的“(”标记

bash 中的 grom() 关键字抛出意外的“(”标记

我不完全确定为什么我的程序中出现错误.bash_profile

syntax error near unexpected token `('

grom()当我在我的函数中使用关键字时。我想创建一个 bash 函数,它会自动将我的 master 分支重新设置为 origin

# git status
alias gs='git status'

# git stash list
alias gsl='git stash list'  

grom() {
  branch_name="$(git symbolic-ref --short -q HEAD)"
  git fetch && git rebase origin/master && git checkout master && git rebase origin/master && git checkout $branch_name
}

# git stash apply. must append stash@{num}
alias gsa="git stash apply"

当我更改函数名称时,它可以正常编译。我找不到grom关键字,所以我不确定问题是什么。如果我将函数重命名为其他类似的名称git-rom,甚至类似的名称groms,它可以正常编译。是否有一些特殊的关键字不起作用?这是在 Mac OS X 上。

答案1

如果您使用bash,您可能会更幸运地将其声明为:

function grom() { … }

(笔记:function 不管用在严格的 POSIX shell 中,比如dash!)


@八月建议(通过对此答案的编辑)这是由于别名冲突(或者,不太合理的是,以某种方式定义的内置函数)。

保留字功能要么改变加载顺序以抢占冲突(别名在函数定义期间扩展),要么通过禁用 bash 来避免问题POSIX模式(这可能允许覆盖内置函数)。

bash(1)手册页:

别名在读取函数定义时展开,而不是在执行函数时展开,因为函数定义本身就是复合命令。因此,函数中定义的别名只有在执行该函数之后才可用。

如果您有冲突的别名,您可以unalias grom在采购之前尝试.bash_profile(没有必要添加到该文件,除非您仍在定义该冲突的别名)以清除过去的实验。或者,启动一个新终端以重新开始。

相关内容