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ď č. 1Nepouží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