Beberapa alasan OP menyatakan opsi tidak cocok tidak memiliki dasar dalam kenyataan. Di sini, saya menunjukkan efek seperti apa yang menggunakan strategi OP 4:
Pada sebagian besar distribusi, grepdiinstal dalam /bin(khas) atau /usr/bin(OpenSUSE, mungkin yang lain), dan default PATHberisi /usr/local/binsebelum /binatau /usr/bin. Ini berarti bahwa jika Anda buat /usr/local/bin/grepdengan
#!/bin/sh
exec /bin/grep --color=auto "$@"
di mana /bin/shshell yang kompatibel dengan POSIX disediakan oleh distribusi Anda, biasanya bash atau dash. Jika grepada /usr/bin, maka buatlah itu
#!/bin/sh
exec /usr/bin/grep --color=auto "$@"
Overhead skrip ini minimal. The execpernyataan berarti bahwa penafsir naskah digantikan oleh grepbiner; ini berarti bahwa shell tidak tetap dalam memori saat grepsedang dieksekusi. Dengan demikian, satu-satunya overhead adalah satu eksekusi tambahan dari penerjemah skrip, yaitu latensi kecil dalam waktu jam dinding. Latensi kira-kira konstan (bervariasi hanya tergantung pada apakah grepdan shsudah dalam cache halaman atau tidak, dan pada seberapa banyak bandwidth I / O tersedia), dan tidak tergantung pada berapa lama grepdieksekusi atau berapa banyak data yang diproses.
Jadi, berapa lama latensi itu, yaitu overhead ditambahkan oleh skrip wrapper?
Untuk mengetahuinya, buat skrip di atas, dan jalankan
time /bin/grep --version
time /usr/local/bin/grep --version
Di mesin saya, yang pertama membutuhkan waktu nyata 0,005 (melintasi sejumlah besar berjalan), sedangkan yang terakhir membutuhkan waktu nyata 0,006. Jadi, overhead menggunakan pembungkus pada mesin saya adalah 0,001 (atau kurang) per doa.
Ini tidak signifikan.
Saya juga gagal melihat sesuatu yang "kotor" tentang ini, karena banyak aplikasi dan utilitas umum menggunakan pendekatan yang sama. Untuk melihat daftar seperti itu di mesin Anda di /bindan /usr/bin, jalankan saja
file /bin/* /usr/bin/* | sed -ne 's/:.*shell script.*$//p'
Pada komputer saya, output di atas termasuk egrep, fgrep, zgrep, which, 7z, chromium-browser, ldd, dan xfig, yang saya gunakan cukup sering. Kecuali jika Anda menganggap seluruh distribusi Anda "kotor" karena mengandalkan skrip wrapper, Anda tidak punya alasan untuk menganggap skrip wrapper seperti itu "kotor".
Mengenai masalah skrip pembungkus seperti itu dapat menyebabkan:
Jika hanya pengguna manusia (yang bertentangan dengan skrip) yang menggunakan versi grep yang secara default untuk mendukung warna jika output ke terminal, maka skrip wrapper dapat dinamai colorgrepatau cgrepatau apa pun yang sesuai dengan OP.
Ini menghindari semua kemungkinan masalah kompatibilitas, karena perilaku greptidak berubah sama sekali.
Mengaktifkan grepopsi dengan skrip wrapper, tetapi dengan cara yang menghindari masalah baru:
Kami dapat dengan mudah menulis ulang skrip pembungkus untuk mendukung kebiasaan GREP_OPTSmeskipun GREP_OPTIONStidak didukung (karena sudah usang). Dengan cara ini pengguna cukup menambahkan export "GREP_OPTIONS=--color=auto"atau mirip dengan profil mereka. /usr/local/bin/grepkemudian
#!/bin/sh
exec /bin/grep $GREP_OPTIONS "$@"
Perhatikan bahwa tidak ada tanda kutip di sekitar $GREP_OPTIONS, sehingga pengguna dapat menentukan lebih dari satu opsi.
Di sistem saya, mengeksekusi time /usr/local/bin/grep --versiondengan GREP_OPTIONSkosong, atau dengan GREP_OPTIONS=--color=auto, sama cepatnya dengan versi sebelumnya dari skrip wrapper; yaitu, biasanya membutuhkan satu milidetik lebih lama untuk dieksekusi daripada polos grep.
Versi terakhir ini adalah yang saya pribadi sarankan untuk digunakan.
Singkatnya, strategi OP 4:
direkomendasikan oleh greppengembang
sepele untuk diterapkan (dua baris)
memiliki overhead yang tidak signifikan (latensi ekstra satu milidetik per doa pada laptop khusus ini; mudah diverifikasi pada setiap mesin)
dapat diimplementasikan sebagai skrip wrapper yang menambahkan GREP_OPTSdukungan (untuk menggantikan yang sudah usang / tidak didukung GREP_OPTIONS)
dapat diimplementasikan (sebagai colorgrep/ cgrep) yang tidak mempengaruhi skrip atau pengguna yang ada sama sekali
Karena ini adalah teknik yang sudah banyak digunakan dalam distribusi Linux, itu adalah teknik yang umum dan tidak "kotor".
Jika diimplementasikan sebagai pembungkus terpisah ( colorgrep/ cgrep), itu tidak dapat membuat masalah baru karena tidak mempengaruhi grepperilaku sama sekali. Jika diimplementasikan sebagai skrip wrapper yang menambahkan GREP_OPTSdukungan, menggunakan GREP_OPTS=--color=automemiliki risiko yang sama persis (wrt. Masalah dengan skrip yang ada) yang --color=autoakan ditambahkan default upstream . Dengan demikian, komentar bahwa ini "menciptakan lebih banyak masalah daripada yang dipecahkan" sama sekali tidak benar: tidak ada masalah tambahan yang dibuat.