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")
クラスパス計算が単純化されていることにも注意してください。グロブ(ワイルドカード展開)は、引数を取るコマンドではなくシェルによって実行されるためls
、この場合は使用する必要はありません(使用する必要もありません)。
${}
この場合、元のコードの中括弧は技術的に不要です(純粋に文体です)。たとえば、変数の名前とそれに続くものの間に明確な区切りがない場合に、変数の置換の直後に文字列を追加する必要がある場合に必要になり$my_varsome_string
ます。「最小限の」目的で、上記を説明するために中括弧を削除しましたが、スタイル上の理由から中括弧を保持することはまったく問題ありません。${my_var}some_string
$my_var"some_string"
$my_var'some_string'
"$my_var"some_string
"$my_var""some_string"
上記のコードで一貫して追加した引用符は、内部の潜在的な空白やその他の特定の特殊文字からユーザーを保護します$GROOVY_HOME
。$GROOVY_HOME
空白が含まれないことがわかっている場合は、引用を単純化するために(そして最小限に抑えるために)、それらを自由に削除してください。