Замените eval чем-то другим - PullRequest
0 голосов
/ 24 апреля 2019

Я пытаюсь заменить eval в своем коде чем-то другим.То, что у меня сейчас есть, работает:

#$1 command "command"
#$2 params "--source='Waiting b'"
fun_example(){
  eval java -Dfile.encoding="UTF-8" \  
  -Duser.language="en" -Dspring.profiles.active="x" -jar /x.jar \
  ${1} $(echo ${2} | sed "s|'|\"|g")
} 

Я пробовал разные вещи, но ничего не получалось.Основная проблема заключается в том, что любым другим способом приложение получает параметры с кавычками, например, «Ожидание», и если я их не помещаю, то параметры обрезаются, если в нем есть пробелы «Ожидание» вместо «Ожидание». Я, вероятно, мог бы изменить его.внутри приложения, чтобы удалить кавычки, но я хочу избежать этого.

Если я сделаю это так, я получу упомянутую проблему.

java -Dfile.encoding="UTF-8" \  
-Duser.language="en" -Dspring.profiles.active="x" -jar /x.jar \
${1} $(echo ${2} | sed "s|'|\"|g")

Заранее спасибо.

ОБНОВЛЕНИЕ: Основная проблема в том, что моя команда хранится в переменной env!

1 Ответ

0 голосов
/ 25 апреля 2019

ТАК после большой боли и некоторых полезных советов от @thatootherguy я в итоге воспользовался этим решением

fun_example_call() {
    export LANG=C.UTF-8
    COMMAND=(java -Dfile.encoding="UTF-8" -jar /x.jar "$@")
    "${COMMAND[@]}"
    status=$?

    if [[ ${status} -eq 0 ]]
    then
        return 0
    else
        return 1
    fi
}


#$1 = command "example_command"
#$2 = params - example params "test='wow' wow='test'"
fun_example(){
    IFS="'" read -r -a array <<< $2
    RUN_ARRAY=("fun_example_call" $1)
    for (( VAR = 0; VAR < ${#array[@]}; VAR+=2 )); do
        RUN_ARRAY+=(${array[$VAR]}"${array[$VAR+1]}")
    done
    "${RUN_ARRAY[@]}"
}

Надеюсь, это кому-нибудь поможет. Как сказал @thatootherguy, цель состоит в том, чтобы получить массив параметров, чтобы мы не вызывали семантику стиля system (3)

...