我想找到所有我的bash脚本(我现在积累了很多)并自动通过 bash -n 运行它们。有什么快速的方法吗?我希望
grep
只匹配第一个非空行以 #!/bin/sh
或 #!/usr/bin/env sh
或 #!/usr/bin/env bash
或 #!/bin/bash
开头的文件... 一种可行的答案当然是:for file in *; do
if head -n 5 $file | grep "#!.*sh$" > /dev/null; then
bash -n $file
fi
done
但出于“正确性”的考虑,我该如何合理地在仅第一行的非空白(或替代的非空)字符上使用 grep?
file
命令比 grep 更能告诉你某个文件是不是 shell 脚本。我可以告诉你,bash -n
对一组脚本提供的有限检查非常弱,几乎毫无用处;大多数解释型语言很难(或者说根本不可能)通过静态分析提供太多帮助。 - mswfile
,谢谢。 - Steven Lu#!
(“shebang”)必须是文件的第一行的第一个字符。因此,只需查看文件的第一行即可。 - rob mayofffile
命令的建议作为答案发布。 - chepner