2011-10-01 7 views
9

Es posible escribir scripts de shell en Scala iniciando un archivo de texto con:Shorter Scala Guión cabecera

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

Para facilitar la creación de guión, me gustaría escribir un ejecutable llamado scalash (tal vez un script bash) que permite para acortar el encabezado del script de Scala a solo una línea:

#!/bin/scalash 

¿Es posible? Puntos extra si puedo pasar parámetros opcionales al scalash, por ejemplo para agregar dependencias classpath.

+0

seguro aquí, pero creo que el [ "sólo un parámetro"] (http: // Linux. die.net/man/2/execve) la restricción de la línea shebang proviene del SO; no sé, si hay algo que puedas hacer al respecto. – Dirk

Respuesta

17

En Scala 2.11, puede hacerlo de la siguiente manera (tal y como con la mayoría de otros idiomas):

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

En Scala 2.9.0.1, puede simplemente crear la secuencia de comandos siguiente:

test.scala

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

y hacer que sea ejecutable. (Cambiar la primera línea a la ruta de acceso al ejecutable)

Uso:

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

Incluso puede hacer la primera línea '#!/Usr/bin/env scala'. Debería funcionar siempre que el 'binario' scala' esté en 'PATH', no necesariamente en'/usr/bin/'. –

+1

Estoy ejecutando 2.10.2 y obtengo la "línea 2:! #: Comando no encontrado" – javadba

+0

@javadba - parece que de alguna manera le arrebató el intérprete equivocado. ¿Puedes pegar tu archivo .scala en alguna parte? – Rogach

8

Ver this pull request (era this). No hay ningún problema asociado: si así lo deseas, puedes abrir un problema y comentar sobre la solicitud de extracción.

También puede usar SBT para iniciar los scripts. Consulte información sobre scalashere.

EDITAR

Se aceptó la solicitud de extracción, por lo que esto debería funcionar:

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

Ese enlace apunta a una solicitud de extracción completamente no relacionada. – javadba

+0

@javadba Gracias. Ese enlace apuntaba a un viejo espejo del repositorio svn, que fue reemplazado por el repositorio git actual. Lo he arreglado, y también el otro enlace que desde entonces se ha movido también. –

+0

Espero que la atracción sea aceptada. La situación actual significa que los depuradores están confundidos: ¡los números de línea están desactivados por el número de líneas entre #! y! # – javadba