2010-07-07 2 views
2

В сценарии оболочки Bash я попробовал эти две версии:Выполняют ли команды из текущего каталога в сценарии оболочки?

java -jar abc.jar& 

и

CMD="java -jar abc.jar&" 
$CMD 

Первый verison работает, а вторая версия жалуется, что abc.jar не может быть найден. Зачем?

+0

Две версии эквивалентны (хотя вторая хуже). Имеет ли 'thisFile' пробелы? – Philipp

+0

Нет пробелов. Почему это будет работать для первого, а не второго? – erotsppa

+1

Поскольку вы уже переименовали его в 'thatFile', когда вы запускали первую версию? – mob

ответ

1

Команды выполняются из текущего каталога в сценарии оболочки.

Вот почему работала первая команда в тестовом скрипте.

Вторая команда не может работать, потому что либо java не в вашем ${PATH} или не в вашем ${CLASSPATH}. Вы можете использовать echo эти переменные окружения или set +x для отладки вашего сценария bash.

+0

'java -jar' не использует переменную среды CLASSSPATH. Он использует только запись «Class-Path» из файла манифеста. –

1

Bash (и другие) не позволят вам делать фоновые изображения (&) в пределах значения переменной (и они не позволят вам перенаправить этот путь или конвейеры). Вам следует избегать ввода команд в переменные. См. BashFAQ/050 для получения дополнительной информации.

Какое фактическое сообщение об ошибке вы получаете? Уверен, что это что-то вроде «abc.jar & не найден» (обратите внимание на амперсанд), потому что амперсанд рассматривается как символ в имени файла.

Кроме того, текущий каталог для сценария является каталогом, он запускается из - не каталог, в котором он находится. Вы должны указать, в каком каталоге вы хотите иметь свой файл.

java -jar /path/to/abc.jar& 
Смежные вопросы