有项目源文件。我希望当它们在开发过程中发生变化时,测试将自动运行。
为此,我编写了以下脚本:
#!/bin/bash
WATCH_DIR=.
while read -r file date events; do
if [[ "$file" =~ .*php$ ]]; then
printf '\033[33m%*s\033[0m\n' $(tput cols) ' ' | tr ' ' '-'
echo -e "\033[32m$date\033[0m"
echo "$events" "$file"
composer test
fi
done < <(inotifywait -mqr --timefmt '%T' --format '%w%f %T %e' -e modify -e create -e delete -e move --exclude '\/(vendor|storage|cache)\/|.*\.sw[px]|.*~$' "$WATCH_DIR")
测试需要一些时间。如果在此期间文件再次更改,则测试将结束并重新开始。我不喜欢它。我希望终止当前的测试并在更改时重新启动。
怎么做?
一切都被简单地决定了。
在循环开始时,我们钉住上一个命令
kill $TEST_ID。在循环结束时 - 分配一个新 ID:总而言之,结果是这样的: