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>
代表分钟。)
我正在编写一个 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 相同,但请参阅 set -- $(date +%H +%M)
,这样 </code> 代表小时,<code>
代表分钟。)