Как передать аргументы из скрипта оболочки в приложение Java? - PullRequest
24 голосов
/ 23 января 2011

Я хочу запускать Java-программы, которые я создаю, в командной строке (linux и mac).Я не хочу все время набирать «java» и аргументы, поэтому я думаю о создании сценариев-оболочек.Какой лучший способ сделать это, чтобы они работали везде?Я тоже хочу иметь возможность передавать аргументы.Я думал об использовании «shift» для этого (удаляя первый аргумент).

Есть ли лучший способ сделать это без использования скриптов вообще?Возможно, создать исполняемый файл, который не требует вызова через команду "java"?

Ответы [ 2 ]

45 голосов
/ 23 января 2011

Предполагается, что вы используете оболочку, совместимую с оболочкой Bourne; например sh, bash, ksh и т. д. следующая оболочка передаст все аргументы командной строки команде java:

#!/bin/sh
OPTS=... 
java $OPTS com.example.YourApp "$@"

$@ расширяется до оставшихся аргументов для сценария оболочки, а заключение в кавычки приводит к тому, что аргументы заключаются в индивидуальные кавычки, так что следующий аргумент передаст Java один аргумент:

$ wrapper "/home/person/Stupid Directory Name/foo.txt" 

Без двойных кавычек около "$@" в скрипте-оболочке Java получит три аргумента для вышеприведенного.


Обратите внимание, что это не работает с "$*". Согласно ручной записи bash:

"$*" эквивалентно "$1c$2c...", где c является первым символом значения переменной IFS.

Другими словами, все аргументы оболочки будут объединены в один командный аргумент для вашего Java-приложения, игнорируя исходные границы слов.

См. Руководство bash или sh ... или спецификацию оболочки POSIX ... для получения дополнительной информации о том, как оболочка обрабатывает кавычки.

5 голосов
/ 23 января 2011

Вы можете создать сценарий оболочки , который принимает аргументы .В вашем сценарии оболочки это будет выглядеть примерно так: -

java YourApp $1 $2

В этом случае YourApp принимает два аргумента.Если ваш сценарий оболочки называется app.sh, вы можете выполнить его следующим образом: -

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