2011-01-23 15 views
19

Quiero ejecutar programas Java en los que estoy creando en la línea de comandos (linux y mac). No quiero escribir "java" y argumentos todo el tiempo, así que estoy pensando en crear scripts de envoltura. ¿Cuál es la mejor manera de hacer esto para que funcionen en todas partes? Quiero ser capaz de pasar argumentos, también. Estaba pensando en usar "shift" para hacer esto (eliminando el primer argumento).¿Cómo pasar argumentos del script del shell wrapper a la aplicación Java?

¿Hay alguna forma mejor de hacerlo sin usar ningún script? ¿Tal vez crear un ejecutable que no requiera invocación a través del comando "java"?

Respuesta

42

Suponiendo que está usando una concha que es compatible con el shell Bourne; p.ej. sh, bash, ksh, etc, el siguiente contenedor pasará todos los argumentos de línea de comandos para el comando java:

#!/bin/sh 
OPTS=... 
java $OPTS com.example.YourApp "[email protected]" 

El [email protected] expande al resto de argumentos para el script de shell, y poner entre comillas hace que los argumentos a ser cotizado de forma individual, de modo que lo siguiente funcionará:

$ wrapper "/home/person/Stupid Directory/foo.txt" 
+1

¿Alguien puede explicar por qué '" $ @ "' es mejor que '" $ * "'? – Segfault

+3

@Segfault - porque * "[t] he $ @ se expande a los argumentos restantes para el script de shell, y poniendo comillas a su alrededor ocasiona que los argumentos sean citados individualmente," * –

4

Puede create a shell script que accepts arguments. En la secuencia de comandos shell, que se verá algo como esto: -

java YourApp $1 $2 

En este caso, YourApp acepta dos argumentos. Si el script de shell se llama app.sh, puede ejecutar de esta manera: -

./app.sh FirstArgument SecondArgument 
+2

Lamentablemente, esto se romperá si se llama al guión del wrapper con los argumentos entrecomillados; p.ej. rutas que contienen espacios. Necesita comillas dobles en torno a '$ 1',' $ 2' etcetera –

Cuestiones relacionadas