2011-01-23 14 views
19

Voglio eseguire i programmi Java che sto creando sulla riga di comando (linux e mac). Non voglio digitare "java" e gli argomenti in ogni momento, quindi sto pensando di creare script wrapper. Qual è il modo migliore per farlo in modo che funzionino ovunque? Voglio essere in grado di passare anche gli argomenti. Stavo pensando di usare "shift" per farlo (rimuovendo il primo argomento).Come passare argomenti dallo script della shell wrapper all'applicazione Java?

C'è un modo migliore per farlo senza utilizzare gli script? Forse creare un eseguibile che non richieda invocazione tramite il comando "java"?

risposta

42

Supponendo che si sta utilizzando un guscio che è compatibile con la shell Bourne; per esempio. sh, bash, ksh, etc, il seguente involucro passerà tutti gli argomenti della linea di comando per il comando java:

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

La [email protected] espande ai restanti argomenti per lo script, e conclude apici intorno provoca gli argomenti essere citato singolarmente, in modo che il proceda in questo modo:

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

qualcuno può spiegare il motivo per cui ' "$ @"' 'è meglio di "$ *"'? – Segfault

+3

@Segfault - perché * "[l] a $ @ si espande per i restanti argomenti per lo script di shell, e mettere le virgolette attorno ad esso fa sì che gli argomenti per essere citati individualmente," * –

4

Puoi create a shell script che accepts arguments. Nello script di shell, che sarà simile a questa: -

java YourApp $1 $2 

In questo caso, YourApp accetta due argomenti. Se il vostro script di shell si chiama app.sh, è possibile eseguire in questo modo: -

./app.sh FirstArgument SecondArgument 
+2

Purtroppo, questo si romperà se lo script wrapper è chiamato con argomenti citati; per esempio. percorsi che contengono spazi. Ha bisogno di doppi apici '$ 1',' $ 2' eccetera –

Problemi correlati