Linux、Unixで頻繁に実行したコマンドを入力していますが、Apple Mac OS X 10.8(およびおそらくそれ以前)では、実行しようとするとgrep: unknown --devices option
が表示されます。次のコマンド:
find . -type f -name '*.sql' 2>/dev/null | xargs grep -i 'texttolookfor'
find
コマンドの結果を確認したところ、すべて標準の.sql
ファイルのようです。また、この問題は.sql
ファイルだけでなく他のファイル検索でも発生することを付け加えておきます。 AppleサイトとGoogleを検索したところ、ここで何が起こっているのかを示すものが見つからないようです。
誰か提案がありますか?
面白い名前のファイルをヒットしたようですが、xargsはそれを2つのファイルとして扱っています。最善のアプローチは、すべての名前を安全に処理するために検索結果を作り直すことです。
find . -type f -name '*.sql' -exec grep -i 'texttolookfor' '{}' +
これは、xargs
の代わりにfind--exec COMMAND +
構文を使用します。 -print0
/xargs -0
を使用することもできますが(OS Xで機能するかどうかはわかりません)、他のxargs機能が必要でない限り、実際に使用する理由はありません。
最後に、OS X grepがそれをサポートしている場合は、--
を使用して、オプションの終了を示すことができます。これは、上記の'{}'
の前にありますが、find(見つかったファイルは常に./
で始まるため)
これは、環境変数GREP_OPTIONS
が設定されているようです。次のコマンドで確認できます。
$ env | grep GREP_OPTIONS
設定されている場合は、設定を解除するだけです。
$ unset GREP_OPTIONS
なぜこれがOSXで行われるのかわかりません。煩わしい場合は、永久に無効にするより良い方法があるかもしれませんが、$HOME/.bashrc
ファイルに行を追加するだけで、これが機能しないと仮定すると機能するはずです。このファイルの後に他の何かによって設定されていません。
unset GREP_OPTIONS
MacはLinuxからではなくBSDから派生しているため、ターミナルにあるツールの多くはBSDであり、GNUではなくユーティリティのフレーバーであることに注意してください。 BSDとGNUのバージョンはほとんど互換性がありますが、微妙ですぐに怒る多くの違いがあります。これらの微妙な点の多くは、sed
などのテキスト処理ツールで発生します。 grep
; tar
でさえ、覚えておく必要のあるいくつかの問題があります。
MacPorts のインストールを検討し、それを使用してGNUバージョンのユーティリティを入手することをお勧めします。 Macと互換性のあるスクリプト。