2011-10-01 4 views
9

E 'possibile scrivere script di shell a Scala avviando un file di testo con:Shorter Script Scala intestazione

#!/bin/sh 
exec scala "$0" "[email protected]" 
!# 

Per facilitare la creazione di script, vorrei scrivere un eseguibile chiamato scalash (forse uno script Bash) permettendo accorciare l'intestazione dello script Scala a una sola riga:

#!/bin/scalash 

È possibile? Punti extra se posso passare i parametri opzionali a scalash, ad esempio per aggiungere dipendenze del percorso di classe.

+0

sicuro qui, ma credo che il [ "solo parametro"] (http: // linux. die.net/man/2/execve) la restrizione della linea shebang proviene dal sistema operativo; non so, se c'è qualcosa che potresti fare al riguardo. – Dirk

risposta

17

In Scala 2.11, si può fare come segue (esattamente come con la maggior parte delle altre lingue):

#!/usr/bin/env scala 
println(args.mkString(" ")) 

In Scala 2.9.0.1, si può semplicemente creare il seguente script:

test.scala

#!/usr/bin/scala 
!# 
println(args.mkString(" ")) 

e renderlo eseguibile. (Cambiare la prima linea di percorso del file eseguibile)

Usage:

# ./test.scala Hello world! 
Hello world! 
+6

Puoi anche fare la prima riga '#!/Usr/bin/env scala'. Dovrebbe funzionare fintanto che il binario 'scala' si trova in' PATH', non necessariamente in '/ usr/bin /'. –

+1

Sono in esecuzione 2.10.2 e ottengo "riga 2:! #: Comando non trovato" – javadba

+0

@javadba - sembra che tu abbia in qualche modo afferrato l'interprete sbagliato. Puoi incollare il tuo file .scala da qualche parte? – Rogach

8

Vedere this pull request (era this). Non c'è alcun problema ad esso associato - se ne hai voglia, puoi aprire un problema e commentare la richiesta di pull.

È inoltre possibile utilizzare SBT per avviare gli script. Vedi le informazioni su scalashere.

EDIT

La richiesta di pull è stata accettata, quindi questo dovrebbe funzionare:

#!/usr/bin/env /path/to/scala 
etc 
Non
+0

Questo link punta a una richiesta di pull completamente non correlata. – javadba

+0

@javadba Grazie. Quel link puntava a un vecchio mirror del repository svn, che è stato sostituito dal repository git attuale. Ho risolto questo, e anche l'altro link che da allora si è spostato. –

+0

Spero che il tiro venga accettato. La situazione attuale significa che i debugger sono confusi - i numeri delle linee sono fuori dal numero di linee tra #! e! # – javadba