如何在macOS的GitHub Actions工作流中运行bash脚本?
在macOS GitHub工作流中运行bash脚本的解决方案
你遇到的Permission denied错误其实很好解决,这种通过脚本配置DYLD_LIBRARY_PATH的方式完全可行,核心问题就是脚本缺少可执行权限,下面是具体的解决办法和相关说明:
解决步骤:给脚本添加可执行权限
GitHub Actions的runner环境遵循Unix权限规则,从仓库拉取的脚本文件默认不会带有可执行权限,所以你需要先通过chmod命令赋予它执行权限,修改你的工作流步骤即可:
方式一:合并为一个步骤
- name: Append DYLD_LIBRARY_PATH with packages' lib directories run: | chmod +x ${{ github.workspace }}/path.sh ${{ github.workspace }}/path.sh
方式二:拆分为独立步骤(更清晰)
- name: Grant execute permission to path.sh run: chmod +x ${{ github.workspace }}/path.sh - name: Append DYLD_LIBRARY_PATH with packages' lib directories run: ${{ github.workspace }}/path.sh
为什么会出现权限问题?
当你把脚本文件提交到Git仓库时,Git默认不会追踪文件的可执行权限(除非你手动配置了core.filemode),所以当runner拉取仓库代码后,path.sh只有读/写权限,没有执行权限,直接运行就会触发Permission denied错误。
额外优化建议
如果你的脚本内容不算特别复杂,也可以直接在工作流步骤中写命令,这样能避免权限问题,比如:
- name: Append DYLD_LIBRARY_PATH with packages' lib directories run: | echo "export DYLD_LIBRARY_PATH=@CONAN_LIB_DIRS_OPENSSL@:$DYLD_LIBRARY_PATH" >> /Users/runner/.bash_profile echo "export DYLD_LIBRARY_PATH=@CONAN_LIB_DIRS_FREETYPE@:$DYLD_LIBRARY_PATH" >> /Users/runner/.bash_profile echo "export DYLD_LIBRARY_PATH=@CONAN_LIB_DIRS_LIBJPEG@:$DYLD_LIBRARY_PATH" >> /Users/runner/.bash_profile echo "export DYLD_LIBRARY_PATH=@CONAN_LIB_DIRS_LIBPNG@:$DYLD_LIBRARY_PATH" >> /Users/runner/.bash_profile echo "export DYLD_LIBRARY_PATH=@CONAN_LIB_DIRS_BZIP2@:$DYLD_LIBRARY_PATH" >> /Users/runner/.bash_profile echo "export DYLD_LIBRARY_PATH=@CONAN_LIB_DIRS_BROTLI@:$DYLD_LIBRARY_PATH" >> /Users/runner/.bash_profile echo "export DYLD_LIBRARY_PATH=@CONAN_LIB_DIRS_ZLIB@:$DYLD_LIBRARY_PATH" >> /Users/runner/.bash_profile
不过如果后续需要修改这些配置,单独维护脚本文件还是更便于管理的,只要记得添加权限步骤就没问题。
内容的提问来源于stack exchange,提问作者Igor Mironchik
相关产品推荐
相关产品推荐

