【发布时间】:2013-06-08 02:15:35
【问题描述】:
我想找到我所有的 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可以对一组脚本提供的有限检查非常弱,以至于毫无用处;大多数解释型语言都很难(不可能?)通过静态分析来提供很多东西。 -
好吧。我会尽我所能,如果它知道明显的语法错误,这对我很有帮助。我会调查
file,谢谢 -
没有理由寻找“第一个非空行”。
#!(“shebang”)必须是文件第一行的第一个字符。因此,查看文件的第一行就足够了。 -
@robmayoff 啊,谢谢。不知道那个。但既然我想知道怎么做,我必须知道。
-
@msw 您应该发布
file命令的建议作为答案。