entr kullanımıentr sizin dosya değiştiğinde bir komutu tekrar çalıştırmanızı sağlayan bir araçtır. Bu araçla ekstra bir şeye ihtiyaç duymadan yazılım projelerimize ekstra bir pakete/kütüphaneye ihtiyaç duymadan hotreload özelliği ekleyebiliriz.
Basitçe bunun için şu komutu kullanabiliriz: ls *.go | entr -r go run .. Bu komut çalışma dizinimiz içindeki .go uzantısı ile biten bir dosyanın değişmesi sonucunda go run . komutunu çalıştıracak. Eğer iç içe dizinlerden oluşan bir projeniz varsa find . | grep '\.go$' | entr -r go run . daha doğru olacaktır. Bu komut geçerli dizin ve alt dizinleri içerisindeki herhangi .go uzantısı ile biten bir dosyanın değişmesi sonucunda go run . komutunu çalıştıracaktır.
find . | grep '\.go$' | entr -r go run . komutunu biraz daha açarsak;
find .: Geçerli dizin altındaki bütün dosyaları arar/listeler.grep '\.go$': Sonucun içinden verilen pattern/expression’a göre filtreleme yapar. Bu komuttaki pattern '\.go$‘i daha fazla açarsak; \., normalde regular expressionlarda . hepsi demek ama başına \ ekleyerek bunun hepsi demek değil sadece nokta demek olduğunu söylüyoruz. go$ kısmına gelirsek eşleşme go ile olmalı ve $ ile cümlenin sonuna geldiğimizi velli ediyoruz. Yani \.go$ nun anlamı sonu .go olan.entr hakkında daha detaylı bilgi için man sayfasına bakabilirsiniz.
Regular expression hakkında daha fazla bilgi/açıklama ve denemeler yapabilmek için regex101 sitesine göz atabilirsiniz.
Shell kullanmada yeniyseniz komutları anlamak için explain shell sitesini öneririm.