在 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
如何在不編寫多個
--exclude-dir
選項的情況下執行遞歸 grep 並排除多個目錄?系統為 OSX 10.15.4。
您正在排除具有文字名稱的目錄
/{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
因為您使用字元串而不是正則表達式進行搜尋。
我正在做同樣的事情……
當我在 OSX Big Sur 中的 bash 終端啟動時,它給出了這個消息……
“預設的互動式 shell 現在是 zsh。要更新您的帳戶以使用 zsh,請執行
chsh -s /bin/zsh
。有關更多詳細資訊,請訪問https://support.apple.com/kb/HT208050。”所以我做了一個 grep 搜尋,尋找一個包含“預設互動式外殼”字樣的文件。我沒有找到這樣的文件。
事實證明,“預設互動式 shell 等”消息實際上是硬編碼到 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 互動式 s|
000775e0 68 65 6c 6c 20 69 73 20 6e 6f 77 20 7a 73 68 2e |地獄現在是zsh。|
(注意:我的 $BASH_VERSION 是 3.2.57(1)-release)
(注意:有許多 ASCII 消息硬編碼到 bash 中。)
可以通過在 ~/.bash_profile 導出 BASH_SILENCE_DEPRECATION_WARNING=1 中添加以下行來消除此警告
伊恩·詹姆斯