shebang groovy выдает ошибку

У меня есть следующие строки в моем файле .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?


person allthenutsandbolts    schedule 24.07.2012    source источник
comment
Я скопировал ваш пример, и он работает здесь (10.7.4). Вы проверили свои разрешения?   -  person doelleri    schedule 24.07.2012


Ответы (1)


Цель трюка #!/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 в каталог с более коротким абсолютным путем.

person Keith Thompson    schedule 24.07.2012
comment
Как и type -a groovy, which groovy подскажет вам путь. Возможно, немного легче запомнить. - person doelleri; 24.07.2012
comment
@doelleri: type -a может быть немного информативнее; which не сообщает псевдонимы или функции. - person Keith Thompson; 24.07.2012
comment
Спасибо, это сработало. Не было нескольких версий, но у меня был псевдоним, который на самом деле указывал на настоящий двоичный файл. Когда я изменил его, чтобы использовать фактический двоичный файл, это сработало. - person allthenutsandbolts; 24.07.2012