2010-12-19 1 views
6

J'essaie de faire fonctionner sbt en utilisant la coque de poisson.Pourquoi le TBT quitte-t-il le poisson?

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

Quand j'appelle SBT je reçois les éléments suivants

[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. 

Puis SBT quittes. Pourquoi? Ne devrait-il pas attendre les commandes?

Sur une note éventuellement liée, je suis sûr que je n'avais pas l'habitude de faire #! [Shell] sur la première ligne lorsque j'utilisais bash. Qu'est-ce qui a changé?

MISE À JOUR: Lors de l'écriture du script équivalent à utiliser tout bash fonctionne bien, SBT ne fait pas une construction puis quittez

#!/bin/bash 
java -Xmx512M -jar `dirname $0`/sbt-launch-0.7.4.jar "[email protected]" 
+0

Que signifie 'dirname (status -f)' dans un script 'fish'? Est-ce que 'sbt-launch-0.7.4.jar' se trouve dans ce répertoire? En général, ce n'est pas une bonne idée d'essayer d'exécuter des choses à partir du même répertoire que le script. Cela ne marche souvent pas. Vous devriez utiliser un emplacement fixe: '/ chemin/vers/sbt-launch-0.7.4.jar'. Courez-vous 'fish' en tant que shell interactif? Y a-t-il une raison pour qu'un script aussi simple ait besoin d'être un script 'fish' et non un script' sh'? –

+0

Oui, le fichier est dans le même répertoire que le script, comme indiqué ici http://code.google.com/p/simple-build-tool/wiki/Setup Bons points, peut-être que je devrais juste utiliser bash (Je suis nouveau à ce sujet, comme le poisson, et peut-être emporté) – Pengin

Répondre

3

Si vous n'utilisez pas de tralala (#!/usr/local/bin/fish dans votre exemple), un script sera exécuté avec le shell par défaut sur votre système, probablement /bin/sh.

Si vous exécutez votre script en utilisant #!/bin/sh ou #!/bin/bash, cela fonctionne-t-il comme vous le souhaitez?

Rien dans votre script ne devrait affecter la façon dont les choses fonctionnent différemment des autres coques. Je ne comprends pas comment votre script se rapporte à ce que vous faites (surtout parce que je ne suis pas familier avec sbt). Quel est le nom de votre script? Comment ça s'appelle? Comment appelez-vous sbt?

+0

Le script est appelé 'sbt' dans ~/bin, et est basé sur ces instructions http://code.google.com/p/simple-build- tool/wiki/Setup Normalement, lorsque j'utilise bash, je peux juste appeler 'sbt' et il va s'exécuter et me présenter avec l'invite de commande sbt. – Pengin

1

On dirait que vous exécutez le shell en tant que script, pas en tant que shell. Fish va juste exécuter votre commande java et ensuite quitter.

Prenez le bang de ce script et de le rendre exécutable et vous pouvez simplement l'exécuter comme

/chemin/vers/poissons/path/to/script

je crois.

+0

Sans le "!" Je reçois une erreur: "exec: erreur de format Exec poisson: Le fichier '/ Users/Pengin/bin/sbt' est marqué comme un exécutable mais n'a pas pu être exécuté par le système d'exploitation." – Pengin

+0

Désolé, je voulais dire toute cette ligne. Alors "fish/script" est le même que "fish java ..." et vous pouvez voir ce qui se passe. Malheureusement, je suis seulement sur mon iPad en ce moment, donc travailler de mémoire. – JohnMetta

+0

Même erreur malheureusement, mais j'ai remarqué que si je garde le #! line in et supprime le "$ argv" alors ça marche comme prévu (en perdant la possibilité de faire des cibles sbt one-shot c'est-à-dire). Pas de chance avec la seule ligne "java". Impossible de comprendre pourquoi il "ne peut pas être exécuté par le système d'exploitation" – Pengin

Questions connexes