Shell 防止在工作时间之外提交的脚本

Shell Script to prevent commits outside of working hours

我正在编写一个 zsh 脚本来阻止我在工作时间之外进行工作,以加强工作与生活的平衡。我现在有这个脚本,如果我在工作时间之外,它会通过控制台消息警告我,但是它不会阻止提交,有什么想法吗?

#!/bin/zsh

while :; do
  currenttime=$(date +%H:%M)
  if [[ "$currenttime" < "15:00" ]] || [[ "$currenttime" > "22:00" ]]; then
    echo "Not in working time"
    exit 1
  else
    echo "Within work time"
  fi
done &
exit 0

这个结构:

while ... do ... done &

作为从当前 shell 分离出来的后台进程运行整个循环,并且 不等待它完成 因此 忽略其退出状态 。这让你的脚本 运行 只剩下一行:

exit 0

设置钩子的状态:“一切顺利,让提交发生!”

您首先不应使用循环:只需使用简单的 if 测试即可。不要做背景。

(作为 shell 测试的一般规则,请注意词典比较。正如 LeGEC 在评论中指出的那样,它应该适用于您的特定情况。我不使用 zsh,所以我不确定它的行为是否与此处的 bash 相同,但请参阅 and How can I compare numbers in Bash? 进一步注意,您只需要此处使用的测试的数字小时,这可以简化事情,但如果您确实想要检查小时和分钟,将它们分成两个数字可能会有所帮助。一个方便的技巧是使用 set -- $(date +%H +%M),这样 </code> 代表小时,<code> 代表分钟。)