我正在尝试查找包含文本“默认交互式 shell”的文件。我正在尝试使用以下 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 终端启动时,它给出了这条消息......
“默认的交互式 shell 现在是 zsh。要更新您的帐户以使用 zsh,请运行chsh -s /bin/zsh
。有关更多详细信息,请访问https://support.apple.com/kb/HT208050。”
因此,我进行了 grep 搜索,查找包含“默认交互式 shell”一词的文件。我没有找到这样的文件。
事实证明,消息“默认交互式 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 交互式 |
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
伊恩·詹姆斯