aug*_*aug 3 bash alias shell-script profile function
我不完全确定为什么我在我的 .bash_profile
syntax error near unexpected token `('
Run Code Online (Sandbox Code Playgroud)
当我将关键字grom()
用于我的函数时。我想创建一个 bash 函数,它会自动使用 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"
Run Code Online (Sandbox Code Playgroud)
当我更改函数的名称时,它编译得很好。我找不到grom
关键字,所以我不确定问题是什么。如果我将该函数重命名为其他任何名称git-rom
,甚至是类似的名称groms
,则它可以正常编译。是否有一些特殊的关键字不起作用?这是在 Mac OS X 上。
如果您正在使用bash
,您可能会更幸运地将其声明为:
function grom() { … }
Run Code Online (Sandbox Code Playgroud)
(注意:在严格的 POSIX shell 中function
不起作用,例如dash
!)
@aug建议(通过对此答案的编辑)这是由于别名冲突(或者,不太可能,以某种方式定义的内置函数)。
保留字函数要么改变加载顺序以抢占冲突(在函数定义期间扩展别名),要么通过禁用 bash 的posix 模式(可能允许覆盖内置)来避免该问题。
从bash(1)
手册页:
别名在读取函数定义时展开,而不是在执行函数时展开,因为函数定义本身就是一个复合命令。因此,函数中定义的别名在执行该函数之前不可用。
如果您有一个冲突的别名,您可以unalias grom
在获取之前尝试.bash_profile
(除非您仍在定义该冲突的别名,否则没有必要添加到该文件中)以清除您过去的实验。或者,启动一个新终端以重新开始。