您也可以尝试下面的技术,它独立于 Groovy 语法(并且通常不会在 上产生输出stderr
):
#!/bin/sh
script_dir=$(dirname "$0")
export GROOVY_HOME="$script_dir/../../../../Tools/groovy/groovy-2.0.2"
awk 'mark_on{print}/^__END__$/{mark_on=1}' "$0" >/tmp/$$.groovy
"$GROOVY_HOME/bin/groovy" -cp "$script_dir:$(echo "$script_dir"/build/lib/runtime/*.jar | tr " " :)" /tmp/$$.groovy
status=$?
rm -f /tmp/$$.groovy
exit $status
__END__
println("aoeu")
还要注意类路径计算的简化;请记住,通配符(通配符扩展)是由 shell 执行的,而不是由接受参数的命令执行的,因此在这种情况下您不必(也不想)使用ls
。
在这种情况下,原始代码中的大括号${}
在技术上是多余的(它们纯粹是风格);例如,如果您必须在变量替换之后直接附加一个字符串,其中变量名称和后面的内容之间没有明确的分隔符,则需要它们,例如,您不能说但$my_varsome_string
您可以写${my_var}some_string
, 或任何$my_var"some_string"
or$my_var'some_string'
或"$my_var"some_string
or "$my_var""some_string"
。我出于“简约”的目的移除了大括号,为了说明上述内容,但同样,出于文体原因保留它们是完全可以的。
我在上面的代码中一致添加的引号可以保护您免受潜在的空白和某些其他特殊字符的影响$GROOVY_HOME
。$GROOVY_HOME
如果您知道不包含空格,请随意删除它们以简化引用(并保持简约) 。