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) grep
içine yüklenir ve varsayılan , önce veya öğesini içerir . Bu ,/bin
/usr/bin
PATH
/usr/local/bin
/bin
/usr/bin
/usr/local/bin/grep
#!/bin/sh
exec /bin/grep --color=auto "$@"
/bin/sh
dağıtımınız tarafından sağlanan POSIX uyumlu bir kabuk nerede , genellikle bash veya tire. Eğer grep
içindedir /usr/bin
, o zaman yapmak
#!/bin/sh
exec /usr/bin/grep --color=auto "$@"
Bu komut dosyasının yükü minimumdur. exec
Komut yorumlayıcı tarafından değiştirilir ifadesi araçlarının grep
ikili; yani kabuk grep
yü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 grep
ve sh
ne 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 /bin
ve /usr/bin
sadece 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 xfig
ben 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 colorgrep
veya cgrep
OP'nin uygun gördüğü her şey olabilir .
Bu, tüm uyumluluk sorunlarını önler, çünkü davranışları grep
hiç değişmez.
grep
Seçenekleri bir sarıcı komut dosyasıyla, ancak yeni sorunları önleyecek şekilde etkinleştirme :
Desteklenmemiş GREP_OPTS
olsa 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/grep
o zaman
#!/bin/sh
exec /bin/grep $GREP_OPTIONS "$@"
$GREP_OPTIONS
Kullanı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 --version
olan GREP_OPTIONS
boş 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:
grep
geliş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_OPTS
destek 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, grep
davranışı hiç etkilemediğinden yeni sorunlar oluşturamaz . GREP_OPTS
Destek ekleyen bir sarıcı komut dosyası olarak uygulanırsa , kullanma GREP_OPTS=--color=auto
iş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.