OSXでgrep --exclude-dirを使用する

OSXでgrep --exclude-dirを使用する

「デフォルトの対話型シェル」というテキストを含むファイルを見つけようとしています。次のgrepコマンドを使用して検索します。

grep -r --exclude-dir='/{var,Volumes,bin,cores,dev,sbin,tmp,usr}' "The default interactive shell" /

ただし、/usr次のエラー メッセージに示すように、まだ検索します。

grep: /usr/bin/sudo: Permission denied

複数のオプションを作成せずに再帰的なgrepを実行し、複数のディレクトリを除外する方法は--exclude-dir?システムはOSX 10.15.4です。

答え1

リテラル名を持つディレクトリを除いています/{var,Volumes,bin,cores,dev,sbin,tmp,usr}。これは一重引用符が原因で発生します。中かっこ拡張が引用されると、もはや中括弧拡張ではなくプレーンテキストになります。

中かっこを正しく拡張するには、引用符を削除します。

grep -R --exclude-dir=/{var,Volumes,bin,cores,dev,sbin,tmp,usr} \
    -F 'The default interactive shell' /

-F正規表現ではなく文字列を使用して検索するため、追加しました。

答え2

私も同じことをしています...

OSX Big Surでbash端末を実行すると、次のメッセージが表示されます。

「デフォルトのインタラクティブシェルはzshです。zshを使用するようにアカウントを更新するには、を実行してください。chsh -s /bin/zsh詳細については、次を参照してください。https://support.apple.com/kb/HT208050. 」

それで、「デフォルトの対話型シェル」という単語を含むファイルを見つけました。そのような文書が見つかりませんでした。

「Default Interactive Shell, etc.」というメッセージが実際に bash にハードコーディングされていることがわかりました。

hexdump -C /bin/bash 生成...

000775c0 6e 2f 7a 73 68 00 0a 54 68 65 20 64 65 66 61 75 |n/zsh..基本|

000775d0 6c 74 20 69 6e 74 65 72 61 63 74 69 76 65 20 73 |ltインタラクティブ|

000775e0 68 65 6c 6c 20 69 73 20 6e 6f 77 20 7a 73 68 2e |地獄は今zshです。 |

(注:私の$ BASH_VERSIONは3.2.57(1)リリースです。)

(注:Bashには多くのASCIIメッセージがハードコードされています。)

この警告は、〜/.bash_profileエクスポートBASH_SILENCE_DEPRECATION_WARNING = 1に次の行を追加することで抑制できます。

イアンジェームズ

関連情報