我想找到我所有的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?
答案 0 :(得分:3)
使用find:
find . -type f -exec grep -e "^#\!\/bin\/.*sh$" {} +
答案 1 :(得分:2)
GNU awk
awk '
FNR==1 && $0~/#!\/bin\/sh|#!\/usr\/bin\/env sh|#!\/usr\/bin\/env bash|#!\/bin\/bash/ {
print FILENAME " is shell script";
}
FNR>1 {
nextfile
}' *
regex
并将其缩小为#!
。 FNR==1
以及regex
将确保检查she-bang
行的第一行。 nextfile
将确保不会在第一行之外查找任何文件。 print
仅用于记录。FILENAME
将打印受检查文件的名称。*
将对工作目录下的所有文件进行全局处理。