0

.sh ファイルに次の行があります

#! /usr/bin/env /Users/myuser/Development/tools/groovy

println "this is a test"

env: /Users/myuser/tools/groovy: 権限が拒否されました

コマンド /usr/bin/env groovy を実行すると、エラーは発生しません。OS X でなぜそれが起こるのか、何か手がかりはありますか?

4

1 に答える 1

3

このトリックの目的は#!/usr/bin/env、インターピーターへのフル パスを指定する必要がないようにすることです。詳細については、この質問(および私の回答) を参照してください。とにかく完全な絶対パスを指定しているので、次を使用することもできます。

#!/Users/myuser/Development/tools/groovy

これが機能しない理由については、おそらく、 のgroovy別の場所にコマンドがあり$PATH/usr/bin/env groovyその別のコピーを呼び出しています。

これ:

type -a groovy

は、どのgroovy実行可能ファイルがあなたの中にあるかを教えてくれます$PATH。この:

ls -l /Users/myuser/Development/tools/groovy

「許可が拒否されました」というエラーが表示される理由を教えてください。ほとんどの場合、そのファイルは実行可能ではありません。

別の可能性: 一部のシステムでは、行の長さが制限されてい#!ます。OSXがそうするかどうかはわかりません。その場合、groovyコマンドへのパスが切り捨てられている可能性があります。これが問題である場合は、groovy絶対パスが短いディレクトリにコマンドを移動またはコピーすることを検討してください。

于 2012-07-24T03:11:59.057 に答える