是否有可能检查bash脚本语法而不执行它?
使用Perl,我可以运行Perl -c '脚本名称'。bash脚本是否有等效的命令?
是否有可能检查bash脚本语法而不执行它?
使用Perl,我可以运行Perl -c '脚本名称'。bash脚本是否有等效的命令?
当前回答
我实际上检查了当前目录下所有bash脚本的语法错误,而没有使用find工具运行它们:
例子:
找到。name '*.sh' -print0 | xargs -0 -P"$(nproc)"-I{} bash -n "{}"
如果您想对单个文件使用它,只需编辑带有文件名的通配符。
其他回答
如果你在一个变量中需要一个目录中所有文件的有效性(git pre-commit hook, build lint script),你可以在一个变量中捕获"sh -n"或"bash -n"命令的stderr输出(见其他答案),并基于此有一个" If /else"
bashErrLines=$(find bin/ -type f -name '*.sh' -exec sh -n {} \; 2>&1 > /dev/null)
if [ "$bashErrLines" != "" ]; then
# at least one sh file in the bin dir has a syntax error
echo $bashErrLines;
exit;
fi
根据需要将“sh”改为“bash”
sh -n script-name
运行这个。如果脚本中有语法错误,则返回相同的错误消息。 如果没有错误,则输出时不给出任何消息。您可以使用echo $?,它将返回0,确认成功,没有任何错误。
这对我很有效。我运行在Linux操作系统,Bash Shell。
Null命令[冒号]在调试查看变量值时也很有用
set -x
for i in {1..10}; do
let i=i+1
: i=$i
done
set -
我还在我写的每个bash脚本上启用了'u'选项,以便做一些额外的检查:
set -u
这将报告未初始化变量的使用情况,如以下脚本'check_init.sh'
#!/bin/sh
set -u
message=hello
echo $mesage
运行脚本:
$ check_init.sh
将报告以下内容:
./check_init.sh[4]: message:参数未设置。
对于捕捉错别字非常有用
IntelliJ IDEA有一个检查语法的BashSupport插件。