OPがオプションが不適切であると述べた理由のいくつかは、実際には根拠がありません。ここでは、OPの戦略4を使用してどのような効果があるかを示します。
ほとんどのディストリビューションでgrep
は、は/bin
(標準)または/usr/bin
(OpenSUSE、おそらく他の)にインストールされており、デフォルトでPATH
は/usr/local/bin
before /bin
またはが含まれています/usr/bin
。このユーザーが作成する場合の手段/usr/local/bin/grep
では、
#!/bin/sh
exec /bin/grep --color=auto "$@"
どこ/bin/sh
あなたのディストリビューションが提供するPOSIX互換のシェルは、通常、bashやダッシュ、です。にある場合grep
は/usr/bin
、それを作成します
#!/bin/sh
exec /usr/bin/grep --color=auto "$@"
このスクリプトのオーバーヘッドは最小限です。このexec
ステートメントは、スクリプトインタープリターがgrep
バイナリーに置き換えられることを意味します。これは、シェルgrep
が実行されている間、シェルがメモリに残っていないことを意味します。したがって、唯一のオーバーヘッドは、スクリプトインタープリターの1つの追加の実行、つまり実時間でのわずかな待ち時間です。レイテンシは(だけかどうかによって異なり、ほぼ一定であるgrep
とsh
、ページキャッシュ内かどうか、およびI / O帯域幅が利用可能であるどのくらいの上に既にある)、そしてどのくらいに依存しないgrep
、それが処理を実行またはどのくらいのデータ。
それで、その待ち時間、つまりラッパースクリプトによって追加されるオーバーヘッドはどのくらいですか?
調べるには、上記のスクリプトを作成して実行します
time /bin/grep --version
time /usr/local/bin/grep --version
私のマシンでは、前者は(多数の実行にわたって)0.005秒のリアルタイムで実行されますが、後者は0.006秒のリアルタイムで実行されます。したがって、私のマシンでラッパーを使用するオーバーヘッドは、呼び出しごとに0.001秒(またはそれ以下)です。
これは重要ではありません。
また、多くの一般的なアプリケーションとユーティリティが同じアプローチを使用しているため、これについて「汚い」ことは何も見落としています。/bin
とのマシンでそのようなリストを表示するには、次を/usr/bin
実行します
file /bin/* /usr/bin/* | sed -ne 's/:.*shell script.*$//p'
私のマシンでは、上記の出力は、egrep
、fgrep
、zgrep
、which
、7z
、chromium-browser
、ldd
、とxfig
、私はかなり頻繁に使用しています。ラッパースクリプトに依存するためにディストリビューション全体を「汚い」と見なさない限り、そのようなラッパースクリプトを「汚い」と見なす理由はありません。
問題に関しては、そのようなラッパースクリプトは以下を引き起こす可能性があります。
人間のユーザ(スクリプトではなく)だけは、グレップのバージョンを使用している場合は出力が端末にある場合はカラーサポートへのデフォルトは、ラッパースクリプトは名前を付けることができることをcolorgrep
やcgrep
やOPはフィットを見ているものは何でも。
これにより、の動作grep
がまったく変更されないため、考えられるすべての互換性の問題が回避されます。
grep
ラッパースクリプトでオプションを有効にするが、新しい問題を回避する方法で:
ラッパースクリプトを簡単に書き換えて、サポートされていなくGREP_OPTS
てもカスタムをサポートできますGREP_OPTIONS
(既に非推奨であるため)。このようにして、ユーザーは単にexport "GREP_OPTIONS=--color=auto"
自分のプロファイルに追加または類似することができます。/usr/local/bin/grep
次に
#!/bin/sh
exec /bin/grep $GREP_OPTIONS "$@"
は引用符で囲まれていない$GREP_OPTIONS
ため、ユーザーは複数のオプションを指定できます。
私のシステムでは、空またはで実行するtime /usr/local/bin/grep --version
と、ラッパースクリプトの以前のバージョンと同じくらい高速です。つまり、通常はplainよりも1ミリ秒長く実行されます。GREP_OPTIONS
GREP_OPTIONS=--color=auto
grep
この最後のバージョンは、私が個人的に使用することをお勧めするバージョンです。
要約すると、OPの戦略4:
grep
開発者から推奨されています
実装するのは簡単です(2行)
わずかなオーバーヘッドがあります(この特定のラップトップでの呼び出しごとに1ミリ秒の追加レイテンシ。各マシンで簡単に確認できます)
GREP_OPTS
サポートを追加するラッパースクリプトとして実装できます(非推奨/非サポートを置き換えるためGREP_OPTIONS
)
スクリプトまたは既存のユーザーにまったく影響を与えない(colorgrep
/ としてcgrep
)実装可能
これはすでにLinuxディストリビューションで広く使用されている手法であるため、「ダーティー」ではなく一般的な手法です。
個別のラッパー(colorgrep
/ cgrep
)として実装した場合、grep
動作にまったく影響しないため、新しい問題を作成できません。GREP_OPTS
サポートを追加するラッパースクリプトとして実装された場合、使用にGREP_OPTS=--color=auto
は、上流のデフォルト--color=auto
を追加する場合とまったく同じリスク(既存のスクリプトに関する問題)があります。したがって、これが「解決するよりも多くの問題を作成する」というコメントは完全に正しくありません。追加の問題は作成されません。