bash 命令中的嵌套字符串

bash 命令中的嵌套字符串

我正在尝试编写一个脚本来列出 python 文件中的所有 shebang 行。

我想做的是

sudo bash -c 'for logf in $(find / -name "*.py"); do fgrep '#!/usr/bin' "$logf"; done'

这给出了错误bash: !/usr/bin': event not found。我明白为什么,尽管错误的含义尚不清楚。

问题是我不知道如何bash在不执行命令的情况下将包含另一个字符串的字符串传递给它。

如果我省略“#!”它可以工作,但当然还包括许多其他行。

我几乎尝试了转义和字符串的所有组合,但都没有成功。

答案1

感谢评论,我有两个可以工作的版本。请注意,我做了一些更改(仅在行首查找 shebang)并在 shebang 后允许有空格。

sudo bash -c 'for logf in $(find / -name "*.py"); do grep '^\\#\\!/usr/bin' "$logf"; done'

由于某种原因,当我试图在 shebang 之后留出空白时,我无法让它工作。

更好(也更简单)

sudo find / -name "*.py" -exec grep '^#! */usr/bin' {} \;

相关内容