Команды запускаются из текущего каталога в сценарии оболочки? - PullRequest
2 голосов
/ 08 июля 2010

В скрипте оболочки bash я попробовал две версии:

java -jar abc.jar&

и

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

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

Ответы [ 2 ]

1 голос
/ 08 июля 2010

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

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

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

java -jar /path/to/abc.jar&
1 голос
/ 08 июля 2010

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...