在处理项目时,我经常必须顺序运行这些命令git add --all; git commit -m "some commit message"; git push
以将最近的工作推送到远程存储库。
我认为最好编写一个函数,封装这三个命令并将其放入我的.zshrc
文件中,以便每次启动 shell 时都可以使用它。所以我写了下面的函数,
gp() {
git add --all
git commit -m "$*"
git push
}
export -f gp
当我获取文件.zshrc
或启动新的 shell 会话时。它抛出以下错误:
parse error near `()'
我已经在线检查了定义函数的正确语法,上面的函数对我来说看起来是正确的。我不知道如何解决此错误,将非常感谢您的帮助。
答案1
function-name() command
是 所支持的几种函数定义语法之一zsh
,该语法来自 80 年代早期的 Bourne shell,因此这部分代码没问题。
如果您遇到parse error near `()'
错误,很可能是因为解析器从一开始就不需要函数定义。
例如,这是您会遇到的错误:
case x in
gp() {
body
}
与 after 一样case x in
,zsh 需要 case 模式 或esac
,而不是函数定义。
因此,问题可能出在您未显示的 zshrc 部分的某个位置。当脚本采用 MSDOS 行结尾(CRLF 而不是 LF)格式化时,例如在 Microsoft Windows 系统上编辑脚本时,也经常会出现语法错误。dos2unix
可以用来修复这些问题。
除此之外,这export -f function-name
是一个仅限 bash 的功能。
zsh
没有与该危险功能等效的功能,尽管您可以通过在~/.zshenv
.
"$*"
这也是你会在sh
/中做的事情bash
,因为他们没有更好的方法来做到这一点。它将位置参数与 的第一个字符连接起来$IFS
,无论当时是什么。在 中zsh
,您可以明确指定在与参数扩展标志连接时使用什么分隔符,而不是将其留给掷骰子j
:${(j[ ])@}
例如,用空格连接位置参数。