/ / Ako voláte program java v bash, kde classpath má medzery? - java, bash, rozhranie príkazového riadka

Ako nazývate program java v bash, kde má trasa cesty medzeru? - java, bash, rozhranie príkazového riadku

Predpokladajme, že mám pomenovaný priečinok white space ktorý obsahuje súbor triedy s názvom foo.

Na príkazovom riadku môžem jednoducho zavolať program foo nasledujúcim príkazom na

java -cp "white space/" foo

a fungovalo by to dobre.

Chcem nastaviť tento celý príkaz ako premennú v Bash a nazývať túto premennú namiesto samotného príkazu.

Takže poviem, že som nastavil príkaz na nasledujúce

bar="java -cp "white space/" foo"

Snažil som sa volať príkaz $bar, ale stále dostávam chybu, ktorá hovorí:

Error: Could not find or load main class space

Ako by ste to vyriešili?

odpovede:

2 pre odpoveď č. 1

Nepoužívajte premenné na ukladanie celých príkazových riadkov pretože Použite pole, najlepšie na držanie len možností a zadajte príkaz samostatne.

options=(-cp "white space/" foo)
java "${options[@]}"

alebo definovať funkciu:

bar () {
java -cp "white space/" foo
}

1 pre odpoveď č. 2

Veci sa interpretujú odlišne, pretožeparsovanie vstupného príkazu a spustenie externého programu s parametrami sú dva rôzne kroky vykonané bash a časť prvého kroku tu prechádza.

Riešením je:

eval "$bar"

Ďalšie podrobnosti nájdete na adrese: https://stackoverflow.com/a/11065196/1871033