inotifywait 监控文件修改实时格式化文件
我们在学习 laravel 过程中,从文档网页复制代码,会有一些比较麻烦的问题。以 《Laravel 10 中文文档》 | Laravel China 社区 (learnku.com) 为例
直接点复制按钮会带后,想测试的代码的话,还有处理 use 语句
选中复制时,网站会向剪贴板追加来源信息,还得手动处理。
这些手动处理起来,很浪费时间的,于是想到写个工具吧,专门用来处理这两个问题。
function watch-laravel(){
cd /www/loc.laravel.com # 先cd 到laravel 项目
local dir="app routes tests" # 这里是需要监控的文件和目录
inotifywait --event modify --format "%w%f" -mrq $dir | while read file; do
if [[ ! -f "$file" ]];then
continue
fi
# 处理复制追加内容
if [[ -n "$(grep -Po '文链接' $file)" ]];then
sed -i '/————————————————/,/文链接/d' $file
fi
# 处理 use 语句
if [[ -n "$(sed '/\bnamespace\s/,/\bclass\s/{/namespace/b; /class/b; d}' $file | grep -Po 'use\s+\w+\\.*;')" ]];then
local appends="$(grep -Po 'use\s+\w+\\.*;' $file | sort | uniq)"; appends="${appends//\\/\\\\}"
sed -i -r '/use\s+\w+\\.*;/d' $file
echo "$appends" | while read -r line; do
sed -i -r "/\bnamespace\s/a$line" $file
done
fi
done
}
能自动识别 namespace 和 class 之间内容,正则条件是 \bnamespace\s 和 \bclass\s 即 单词边界+单词+空格,如果文件实在没有 namespace 和 class 那就写两个注释,如下:
//namespace aaa //加上aaa 是为了防止 ide 自动清理行结尾空格
use Illuminate\Support\Facades\RateLimiter;
use Illuminate\Support\Facades\DB;
//class aaa
Route::namespace('\App\Http\Controllers')->group(function(Router $router) {
$router->group(['prefix'=>'demo','namespace'=>'Demo'], function($router) {
$router->any('/user/index','UserController@index')->name('demo.user.index');
});
});