OP'nin seçeneklerin uygun olmadığını belirtmesinin nedenlerinden bazıları gerçekte hiçbir dayanağa sahip değildir. Burada OP'nin 4. stratejisini kullanarak ne tür etkilerin olduğunu gösteriyorum:
Çoğu dağıtımda, (tipik) veya (OpenSUSE, belki diğerleri) grepiçine yüklenir ve varsayılan , önce veya öğesini içerir . Bu ,/bin/usr/binPATH/usr/local/bin/bin/usr/bin/usr/local/bin/grep
#!/bin/sh
exec /bin/grep --color=auto "$@"
/bin/shdağıtımınız tarafından sağlanan POSIX uyumlu bir kabuk nerede , genellikle bash veya tire. Eğer grepiçindedir /usr/bin, o zaman yapmak
#!/bin/sh
exec /usr/bin/grep --color=auto "$@"
Bu komut dosyasının yükü minimumdur. execKomut yorumlayıcı tarafından değiştirilir ifadesi araçlarının grepikili; yani kabuk grepyürütülürken bellekte kalmaz . Bu nedenle, tek yük, kod yorumlayıcısının fazladan yürütülmesi, yani duvar saati süresinde küçük bir gecikmedir. Gecikme kabaca sabittir (yalnızca sayfa önbelleğinde olup olmadığına grepve shne kadar G / Ç bant genişliğinin kullanılabilir olduğuna bağlı olarak değişir ) ve ne kadar süre grepçalıştığına veya ne kadar veri işlediğine bağlı değildir .
Peki, bu gecikme süresi ne kadardır, yani sarıcı komut dosyası tarafından ek yükü?
Bulmak için yukarıdaki komut dosyasını oluşturun ve çalıştırın
time /bin/grep --version
time /usr/local/bin/grep --version
Makinemde, birincisi 0.005s gerçek zaman alır (çok sayıda koşu boyunca), ikincisi 0.006s gerçek zaman alır. Bu nedenle, sarma makinesini makinemde kullanmanın yükü, her invokasyon için 0.001s (veya daha az) 'dir.
Bu önemsiz.
Bu konuda "kirli" bir şey göremiyorum, çünkü birçok yaygın uygulama ve yardımcı program aynı yaklaşımı kullanıyor. Daki makinede böyle listesini görmek için /binve /usr/binsadece koşmak,
file /bin/* /usr/bin/* | sed -ne 's/:.*shell script.*$//p'
Benim makinede yukarıdaki çıkış içerir egrep, fgrep, zgrep, which, 7z, chromium-browser, ldd, ve xfigben oldukça sık olarak kullanırız. Tüm dağıtımınızın sarmalayıcı komut dosyalarına güvenmek için "kirli" olduğunu düşünmüyorsanız, bu tür sarmalayıcı komut dosyalarını "kirli" olarak değerlendirmek için hiçbir nedeniniz yoktur.
Sorunlara gelince, böyle bir sarıcı komut dosyası neden olabilir:
Yalnızca komut dosyası yerine insan kullanıcılar, çıktı bir uçbirimde ise renk desteğini varsayılan olarak kullanan grep sürümünü kullanıyorsa, sarıcı komut dosyası adlandırılabilir colorgrepveya cgrepOP'nin uygun gördüğü her şey olabilir .
Bu, tüm uyumluluk sorunlarını önler, çünkü davranışları grephiç değişmez.
grepSeçenekleri bir sarıcı komut dosyasıyla, ancak yeni sorunları önleyecek şekilde etkinleştirme :
Desteklenmemiş GREP_OPTSolsa bile GREP_OPTIONS(zaten kullanımdan kaldırıldığı için) sarmalayıcı komut dosyasını özel olarak desteklemek için kolayca yeniden yazabiliriz . Bu şekilde kullanıcılar export "GREP_OPTIONS=--color=auto"profillerini kolayca ekleyebilir veya buna benzer. /usr/local/bin/grepo zaman
#!/bin/sh
exec /bin/grep $GREP_OPTIONS "$@"
$GREP_OPTIONSKullanıcıların birden fazla seçenek belirleyebilmeleri için etrafında tırnak olmadığına dikkat edin .
Benim sistemde, yürütme üzerinde time /usr/local/bin/grep --versionolan GREP_OPTIONSboş veya birlikte GREP_OPTIONS=--color=auto, sadece hızlı sarıcı komut dosyası önceki sürümüne kadar olduğu; yani, yürütülmesi normalde düzden bir milisaniye daha uzun sürer grep.
Bu son sürüm, şahsen kullanılmasını tavsiye ettiğim sürümdür.
Özetle, OP'nin strateji 4:
grepgeliştiriciler tarafından tavsiye ediliyor
uygulanması önemsizdir (iki satır)
önemsiz bir ek yüke sahiptir (bu dizüstü bilgisayarda her çağrı için bir milisaniye ekstra gecikme süresi; her makinede kolayca doğrulanabilir)
GREP_OPTSdestek ekleyen bir sarmalayıcı komut dosyası olarak uygulanabilir (kullanımdan kaldırılmış / desteklenmeyenlerin yerini almak için GREP_OPTIONS)
komut dosyalarını veya mevcut kullanıcıları hiç etkilemeyen ( colorgrep/ olarak cgrep) uygulanabilir
Zaten Linux dağıtımlarında yaygın olarak kullanılan bir teknik olduğundan, "kirli" değil, yaygın bir tekniktir.
Ayrı bir paket ( colorgrep/ cgrep) olarak uygulanırsa, grepdavranışı hiç etkilemediğinden yeni sorunlar oluşturamaz . GREP_OPTSDestek ekleyen bir sarıcı komut dosyası olarak uygulanırsa , kullanma GREP_OPTS=--color=autoişlemi, yukarı akış varsayılan eklemenin gerçekleştireceği risklerle (wrt. Varolan komut dosyalarındaki sorunlar) tamamen aynıdır --color=auto. Bu nedenle, bunun "çözdüğünden daha fazla sorun yarattığı" yorumu tamamen yanlıştır: ek sorun yaratılmaz.