Терминал Linux: как передать аргумент другому аргументу - PullRequest
1 голос
/ 05 августа 2011

У меня есть системная программа, которая запускает другие программы в специальной среде: cset shield -e PROGRAM.Теперь, чтобы запустить программу Java, я набрал cset shield -e java PROGRAM, но это не работает.Оказывается, я должен указать полный путь java.Однако, PATH установлен, поэтому сам по себе java PROGRAM работает.Есть ли более простой способ сделать это?

Кроме того, другая моя java-программа требует внешних библиотек и работает нормально сама по себе.Но с cset shield я получил NoClassDefFoundError, что означает, что он не может найти библиотеки.Добавление аргумента classpath (-cp CLASSPATH) привело к сообщению об ошибке "p" contains invalid characters: p.


После опробования различных предложений и их перестановок я наткнулся на способ, который наполовину работает: cset shield --exec -- $(which java) -cp ./:<LIB_PATH>/DA_LIB.jar PROGRAM,Но с этим я получаю UnsatisfiedLinkError: Library not found: DA_LIB

Ответы [ 3 ]

1 голос
/ 05 августа 2011

Вы можете попробовать which, чтобы найти Java:

cset shield -e $(which java) PROGRAM

Это будет запускать Java в специальной среде, а не в вложенной оболочке. (which будет работать в под-оболочке, очевидно).

Чтобы исправить проблему CLASSPATH: я не могу проверить это здесь, но вы, вероятно, можете попробовать это:

cset shield -e "$(which java) -cp <CLASSPATH> PROGRAM"

Где <CLASSPATH> необходимо заменить фактическим путем к классу.

0 голосов
/ 05 августа 2011
cset shield -e $(java PROGRAM)

subshell $ (), кажется, работает лучше, чем обратные метки `` для замены оболочки (запустить команду внутри и вернуть стандартный вывод)

для получения дополнительной информации см.

http://tldp.org/LDP/abs/html/commandsub.html

0 голосов
/ 05 августа 2011

Вы пробовали следующее?

cset shield -e `java PROGRAM`
...