2011-01-23 16 views
19

Chcę uruchamiać programy Java, które tworzę w linii poleceń (Linux i Mac). Nie chcę przez cały czas pisać "java" i argumentów, więc myślę o tworzeniu skryptów opakowujących. Jak najlepiej to zrobić, aby działały wszędzie? Chcę też móc przekazywać argumenty. Myślałem o użyciu "zmiany", aby to zrobić (usunięcie pierwszego argumentu).Jak przekazywać argumenty z skryptu powłoki opakowującej do aplikacji Java?

Czy jest lepszy sposób to zrobić bez korzystania w ogóle ze skryptów? Być może utworzyć plik wykonywalny, który nie wymaga wywoływania za pomocą polecenia "java"?

Odpowiedz

42

Zakładając, że używasz powłoki, która jest zgodna z powłoki Bourne; na przykład sh, bash, ksh, itp, następujące wrapper przejdzie wszystkie argumenty wiersza polecenia do polecenia Java:

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

[email protected] rozszerza się do pozostałych argumentów skryptu powłoki, a oddanie cudzysłowy wokół niego powoduje, że argumenty być indywidualnie cytowany, tak aby następujące czynności działały:

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

Czy ktoś może wyjaśnić, dlaczego '' $ @ "' jest lepsze niż '" $ * "'? – Segfault

+3

@Segfault - ponieważ * "[t] on $ @ rozszerza się do pozostałych argumentów dla skryptu powłoki, a umieszczanie cudzysłowów wokół niego powoduje, że argumenty są cytowane indywidualnie" * –

4

Możesz create a shell script że accepts arguments. W skrypcie powłoki, będzie to wyglądać mniej więcej tak: -

java YourApp $1 $2 

w tym przypadku YourApp przyjmuje dwa argumenty. Jeśli skrypt jest nazywany app.sh, można wykonać ją tak: -

./app.sh FirstArgument SecondArgument 
+2

Niestety, zostanie to przerwane, jeśli skrypt opakowania zostanie wywołany z cytowanymi argumentami; na przykład nazwy ścieżek zawierające spacje. Potrzebuje podwójnych kwotowań około '$ 1',' $ 2' itd. –

Powiązane problemy