mac/linux上git pull sh脚本执行提示Permission denied
网上找到的 chmod 777
只是临时的解决方案,那么要怎样在 git 中上传具有执行权限的脚本呢
如何会遇到这样的问题
以前开发 sh 脚本的时候都会直接在 mac 上开发,近期由于疫情原因,工作转变为了远程办公,因此开发工作便转移到了自己随身设备 windows 上,然而开发完成之后,通过 git 上传,然后准备在 mac 上执行的时候,问题来了。
终端直接给我提示了一句
1 | -bash: ./******.sh: Permission denied |
然后满脑子问号什么情况
直接查询下权限
1 | ls -l |
告诉我我脚本的权限都长这样了 -rw-r--r--
这怎么就没有执行权限了
虽然可以临时通过的方法提升权限,但是不能这么搞啊,脚本一多不得累死嘛
1 | sudo chmod 755 ****.sh |
产生原因
我们在 Windows 下做开发有时会写在 linux 或者 mac 上运行的脚本,这个脚本默认是没有执行权限的。╮(╯▽╰)╭
在 windows 上进入脚本目录打开 git bash
1 | git ls-tree HEAD |
可以看到我们刚才上传的代码都是没有执行权限的,如果有执行权限应该是显示 100755
1 | 100644 blob f5846e262e2e1a4b24fbe01548ecb1b9afbc6a21 ******.sh |
如何解决
我们现在需要在 windows 上提升好权限再上传到 git 上去,以便使用
① 打开 git bash
② 修改 sh 脚本的权限
1 | git update-index --chmod=+x ******.sh |
③ 提交修改,并推送
1 | git commit -m "revise permission access" |
1 | 2 files changed, 1 insertion(+), 1 deletion(-) |
④ 然后再查看权限的时候就会发现,权限都已经提升好了
1 | git ls-tree HEAD |
1 | 100755 blob f5846e262e2e1a4b24fbe01548ecb1b9afbc6a21 ******.sh |
网上其他说法
在 *.sh 脚本头部加上 Shebang ( #!/bin/sh 或者 #!/bin/bash )
添加 #!/bin/sh 之后在 windows 上的 git bash 中变为可执行,但到 linux 上依然不可执行
综上所述
在 windows 上写执行于 linux 上的 sh 脚本时,需要先 commit 脚本文件,然后在 git 中提升脚本的执行权限,最后再进行 push 操作
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Geneliunx!
评论