【发布时间】:2018-06-27 13:43:58
【问题描述】:
由于自动提交和推送的脚本存在一些问题,我想实现一个白名单。
计划是,只允许在路径中使用模式 'foo' 和 'bar' 提交。
#!/bin/sh
WHITELIST="foo bar"
WRKDIR=/home/athur/workwork/test/repo
cd $WRKDIR
git add -A
for file in `git diff --cached -p --name-status | cut -c3-`; do
if [[ "$file" == *"$WHITELIST"* ]] ; then
echo "$file is on whitelist"
else
echo "$file is not on whitelist. Commit aborted."
exit 1
fi
done
问题是,它总是使用“else”子句。 我找不到问题。谢谢
【问题讨论】:
-
如果您在循环中打印出
$file的值,它是否具有您期望的值? -
是的。它具有该文件的正确路径。例如。 foo/file1.txt
-
您正在检查字符串
foo bar是否包含在您的文件名中。这是您想要的,还是要检查 eitherfoo或bar是否存在? -
顺便说一句,如果你想逐行读取
git diff的输出,for循环是错误的做法;请参阅 DontReadLinesWithFor 和 BashFAQ #1,了解最佳实践替代方案的讨论。 -
@CharlesDuffy 我想测试
foo,bar或两者是否都在文件名中。