2017-02-03 7 views
1

После установки jre1.8.0_121 на SLES11 и RedHat7 параметр -Dname = value игнорируется движком nashorn при запуске из командной строки с jjs, если он не префикс -J.Nashorn in jre1.8.0_121 изменил поведение для передачи аргументов?

Кроме того, разделитель аргументов «-» передается в javascript при использовании shebang.

Согласно интерактивной справке, он должен работать так:

$ /usr/java/jre1.8.0_121/bin/jjs -h 
jjs [<options>] <files> [-- <arguments>] 
    -D (-Dname=value. Set a system property. This option can be repeated.) 

В приведенном ниже примере я намеренно оставил хижину! заголовок в javascript. Он не должен быть там, но раскрывает другую разницу между u102 и u121 в том, как аргументы передаются в javascript args.js.

Прослеживание примера без -J показывает, что локальные свойства args.log.properties никогда не читаются. Вместо этого используется значение по умолчанию /usr/java/jre1.8.0_121/lib/logging.properties. Если я заменил файл /usr/java/jre1.8.0_121/lib/logging.properties своим файлом настраиваемых свойств, все будет в порядке.

Является ли это намеренно измененным поведением в u121?

args.sh:

#!/bin/bash -x 
/usr/java/jre1.8.0_102/bin/jjs -scripting -Djava.util.logging.config.file=./args.log.properties ./args.js -- arg1 arg2 $* 
/usr/java/jre1.8.0_121/bin/jjs -scripting -Djava.util.logging.config.file=./args.log.properties ./args.js -- arg1 arg2 $* 

args.js:

#!/usr/bin/env jjs 
print (arguments); 
print ($ARG[0]); 
var logger = java.util.logging.Logger; 
var log = logger.getLogger("args"); 
log.info("log output"); 

args.log.properties:

handlers=java.util.logging.FileHandler, java.util.logging.ConsoleHandler 
.level=ALL 
java.util.logging.ConsoleHandler.level=ALL 
java.util.logging.ConsoleHandler.formatter=java.util.logging.SimpleFormatter 
java.util.logging.SimpleFormatter.format=%1$tY-%1$tm-%1$td %1$tH:%1$tM:%1$tS %4$s %3$s %5$s%6$s%n 

При запуске с 2-мя различными JREs это показано ниже разницы , Пользовательские параметры ведения журнала игнорируются, а разделитель аргументов «-» передается как первый аргумент javascipt. :

$ ./args.sh arg3 
+ /usr/java/jre1.8.0_102/bin/jjs -scripting -Djava.util.logging.config.file=./args.log.properties ./args.js -- arg1 arg2 arg3 
arg1,arg2,arg3 
arg1 
2017-02-03 11:34:59 INFO args log output 
+ /usr/java/jre1.8.0_121/bin/jjs -scripting -Djava.util.logging.config.file=./args.log.properties ./args.js -- arg1 arg2 arg3 
--,arg1,arg2,arg3 
-- 
Feb 03, 2017 11:35:00 AM jdk.nashorn.internal.scripts.Script$args :program 
INFO: log output 
$ 

Добавление «-J» перед -Д решает вопрос системы собственности и работает как с JREs. Вопрос о shebang остается:

$ ./args.sh arg3 
+ /usr/java/jre1.8.0_102/bin/jjs -scripting -J-Djava.util.logging.config.file=./args.log.properties ./args.js -- arg1 arg2 arg3 
arg1,arg2,arg3 
arg1 
2017-02-03 14:04:03 INFO args log output 
+ /usr/java/jre1.8.0_121/bin/jjs -scripting -J-Djava.util.logging.config.file=./args.log.properties ./args.js -- arg1 arg2 arg3 
--,arg1,arg2,arg3 
-- 
2017-02-03 14:04:04 INFO args log output 
$ 
+0

Можете ли вы помочь мне понять, что этот вопрос должен сделать с JavaScript? – evolutionxbox

ответ

0

Я не знаю, было это намеренно или нет. Но я могу подтвердить, что я столкнулся с проблемой: - быть переданным в мои скрипты (у которых есть shebang). За время, я добавил следующие работы вокруг этой проблемы:

if ($ARG.length > 0 && $ARG[0] == "--") { 
    $ARG.shift(); // because sometimes the come through!?! 
} 

Только в случае изменения позднее возвращается его. Для ясности, мои скрипты на самом деле начать с:

#!/usr/bin/jjs -scripting 

Интересно, если изменение связано с ответом здесь: Writing a `jjs` shebanged script that accepts just arguments

 Смежные вопросы

  • Нет связанных вопросов^_^