【问题标题】:Pre-commit hook permission denied inside script脚本内部拒绝预提交挂钩权限
【发布时间】:2020-06-04 09:40:51
【问题描述】:

我有以下预提交钩子:

#!/bin/bash

set -e

result=''

for file in $(find rest/src/main/groovy/ru/naumen/modules -name '*.groovy' | sort); do
    filename=basename "$file"
    result+=echo "${filename//.groovy/}",
done

result+='smpUtils'

sed -i -r "s|modules = .*|modules = $result|g" rest/smpsync.ini

git add rest/smpsync.ini

我在第 8 行收到 Permission denied 错误

filename=basename "$file"

而且我无法确定它的原因。

Hook 本身有执行权 (chmod +x .git/hooks/pre-commit)

./rest/src/main/groovy/ru/naumen/modules 中的整个目录/文件树具有读/写权限并且属于我的用户。

【问题讨论】:

  • filename=basename "$file" 你需要一个$( ) 但也可以用 P.E. 来完成。 filename=${file##*/}
  • 但这不是唯一的问题,试试这个网站来验证 shell 脚本。 shellcheck.net

标签: bash git githooks pre-commit-hook


【解决方案1】:

@VonC 在变量赋值中提到的问题 #1

filename=basename "$file" -> filename=$(basename "$file")

问题 #2 在第 9 行(我刚刚删除了echo):

result+=echo "${filename//.groovy/}", -> result+="${filename//.groovy/}",

【讨论】:

    【解决方案2】:

    试试吧:

    filename="$(basename "$file")"
    

    为了在您的filename 变量中获得command basename 的结果。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-06-18
      • 2015-11-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-19
      • 2012-03-21
      • 2014-10-22
      相关资源
      最近更新 更多