条件总是 returns 错误
condition always returns false
下面是我的预提交git hoook
#!/bin/bash
....
# if git diff -U0 "$FILE_PATH" | grep -iq 'todo'; # Double quoting $FILE_PATH doesnt' change anything
if git diff -U0 $FILE_PATH | grep -iq 'todo';
then
echo $FILE_PATH ' -> Contains TODO'
exit 1
else
echo 'nooooooooooooooooooooooooooooooooooo'
fi
我总是收到 noooooooooooooooooooo
消息,但是下面的命令直接在我的终端上尝试运行良好:
git diff -U0 my/file/path.php | grep -iq 'todo' && echo 'true' || echo 'false'
输出
true
更新
当运行bash .git/hooks/pre-commit
有效时,很奇怪!!
仅供参考
我不知道这是否是重要信息,但是 .git/hooks/pre-commit 是一个符号 link
很可能,您的管道没有 return 状态 0。要验证情况是否如此(而不是您编写复合语句的方式),您可以将其重写为
git diff -U0 "$FILE_PATH" | grep -iq 'todo'
grep_status=$?
echo grep status is $grep_status
if (( grep_status == 0 ))
then
echo contains todo
else
echo no
fi
我还注意到您的代码在 if
行中包含一个不必要的分号。我首先认为这个分号可能会导致奇怪的行为,但至少在我的 bash
上,我尝试了你的代码,它似乎没有造成任何伤害。尽管如此,为了安全起见,我还是会删除它。
下面是我的预提交git hoook
#!/bin/bash
....
# if git diff -U0 "$FILE_PATH" | grep -iq 'todo'; # Double quoting $FILE_PATH doesnt' change anything
if git diff -U0 $FILE_PATH | grep -iq 'todo';
then
echo $FILE_PATH ' -> Contains TODO'
exit 1
else
echo 'nooooooooooooooooooooooooooooooooooo'
fi
我总是收到 noooooooooooooooooooo
消息,但是下面的命令直接在我的终端上尝试运行良好:
git diff -U0 my/file/path.php | grep -iq 'todo' && echo 'true' || echo 'false'
输出
true
更新
当运行bash .git/hooks/pre-commit
有效时,很奇怪!!
仅供参考
我不知道这是否是重要信息,但是 .git/hooks/pre-commit 是一个符号 link
很可能,您的管道没有 return 状态 0。要验证情况是否如此(而不是您编写复合语句的方式),您可以将其重写为
git diff -U0 "$FILE_PATH" | grep -iq 'todo'
grep_status=$?
echo grep status is $grep_status
if (( grep_status == 0 ))
then
echo contains todo
else
echo no
fi
我还注意到您的代码在 if
行中包含一个不必要的分号。我首先认为这个分号可能会导致奇怪的行为,但至少在我的 bash
上,我尝试了你的代码,它似乎没有造成任何伤害。尽管如此,为了安全起见,我还是会删除它。