Почему сбой прекращается при употреблении рыбы?

Я пытаюсь запустить sbt, используя рыбий панцирь.

#!/usr/local/bin/fish 
java -Xmx512M -jar (dirname (status -f))/sbt-launch-0.7.4.jar "$argv"

Когда я звоню SBT, я получаю следующее

[info] Building project MyProject 1.0 against Scala 2.8.1
[info]    using MyProject with sbt 0.7.4 and Scala 2.7.7
[info] 
[info] Total session time: 1 s, completed Dec 19, 2010 4:29:46 PM
[success] Build completed successfully.

Затем sbt завершает работу. Почему? Разве ему не следует просто ждать команд?

Что касается, возможно, связанной заметки, я уверен, что раньше мне не приходилось использовать #! [Shell] в первой строке, когда я использовал bash. Что изменилось?

ОБНОВЛЕНИЕ: при написании эквивалентного скрипта для использования bash все работает нормально, sbt не выполняет сборку, а затем завершает работу.

#!/bin/bash
java -Xmx512M -jar `dirname $0`/sbt-launch-0.7.4.jar "$@"

person Pengin    schedule 19.12.2010    source источник
comment
Что dirname (status -f) выводит в fish скрипте? sbt-launch-0.7.4.jar в этом каталоге? В общем, не рекомендуется пытаться запускать что-либо из того же каталога, в котором расположен сценарий. Часто это не срабатывает. Вы должны использовать фиксированное местоположение: /path/to/sbt-launch-0.7.4.jar. Вы используете fish в качестве интерактивной оболочки? Есть ли причина, по которой такой простой сценарий должен быть сценарием fish, а не сценарием sh?   -  person Dennis Williamson    schedule 19.12.2010
comment
Да, jar находится в том же каталоге, что и скрипт, согласно указаниям здесь code.google.com/p/simple-build-tool/wiki/Setup Хорошие моменты, возможно, мне стоит просто использовать bash (я новичок в этом, как рыба, и, возможно, увлекся)   -  person Pengin    schedule 19.12.2010


Ответы (2)


Если вы не используете shebang (#!/usr/local/bin/fish в вашем примере), сценарий будет работать с оболочкой по умолчанию в вашей системе, что, скорее всего, /bin/sh.

Если вы запустите свой сценарий с использованием #!/bin/sh или #!/bin/bash, будет ли он работать так, как вы ожидаете?

В вашем сценарии нет ничего, что могло бы повлиять на то, как все работает иначе, чем в других оболочках. Я не понимаю, как ваш сценарий соотносится с тем, что вы делаете (в основном потому, что я не знаком с sbt). Как называется ваш сценарий? Как это называется? Как вы звоните в SBT?

person Dennis Williamson    schedule 19.12.2010
comment
Скрипт называется 'sbt' в ~ / bin и основан на следующих инструкциях code.google.com/p/simple-build-tool/wiki/Setup Обычно при использовании bash я могу просто вызвать 'sbt', и он запустится и представит мне командную строку sbt. - person Pengin; 19.12.2010

Похоже, вы запускаете оболочку как сценарий, а не оболочку. Fish просто запустит вашу java-команду и выйдет.

Избавьтесь от этого скрипта и сделайте его исполняемым, и вы можете просто запустить его как

/ путь / к / рыбе / путь / к / скрипту

Я считаю.

person JohnMetta    schedule 19.12.2010
comment
Без ! Я получаю сообщение об ошибке: exec: Ошибка формата Exec fish: файл '/ Users / Pengin / bin / sbt' помечен как исполняемый, но не может быть запущен операционной системой. - person Pengin; 19.12.2010
comment
Извините, я имел в виду всю эту строчку. Тогда fish / script - это то же самое, что fish java ... и вы можете видеть, что происходит. К сожалению, сейчас у меня только iPad, так что работаю по памяти. - person JohnMetta; 19.12.2010
comment
К сожалению, та же ошибка, но я заметил, что если оставить #! и удалите $ argv, тогда он будет работать, как ожидалось (потеря способности выполнять одноразовые цели sbt). Однако с одной строкой java не повезло. Не могу понять, почему он не может быть запущен операционной системой - person Pengin; 19.12.2010