2016-07-23 4 views
1

Я пытаюсь запустить erl из сценария bash. Когда я передаю содержимое выражения eval из переменной erl, невозможно запустить. Когда опция eval напрямую указана , указанная в командной строке erl, erl запускается без каких-либо проблем. Как это сделать правильно?Передача -eval для Erlang erl из переменной bash не удается

#!/bin/bash 
echo "-----------------------------------" 
# 
# Fails 
EVAL_EXP1="\"ok, observer:start(), ok\"" 
echo $EVAL_EXP1 
erl -eval $EVAL_EXP1 
# 
# Fails 
echo "-----------------------------------" 
EVAL_EXP2="ok, observer:start(), ok" 
echo $EVAL_EXP2 
erl -eval $EVAL_EXP2 
# 
# Works 
echo "-----------------------------------" 
erl -eval "ok, observer:start(), ok" 

Выходного сценарий

13:30 $ ./start.sh 
    ----------------------------------- 
    "ok, observer:start(), ok" 
    Crash dump is being written to: erl_crash.dump...done 
    System process <0.0.0> terminated: {function_clause, 
    [{init,prepare_run_args,[{eval,[<<"\"ok,">>,<<"observer:start(),">>, 
    <<"ok\"">>]}],[]},{init,map,2,[]},{init,boot,1,[]}]} 
    ./start.sh: line 7: 26573 Aborted  (core dumped) erl -eval $EVAL_EXP1 
    ----------------------------------- 
    ok, observer:start(), ok 
    (no error logger present) error: <0.0.0> 

    Crash dump is being written to: erl_crash.dump...done 
    System process <0.0.0> terminated: {function_clause, 
    [{init,prepare_run_args,[{eval,[<<"ok,">>,<<"observer:start(),">>, 
    <<"ok">>]}],[]},{init,map,2,[]},{init,boot,1,[]}]} 
    ./start.sh: line 13: 26599 Aborted     (core dumped) erl -eval 
    $EVAL_EXP2 
    ----------------------------------- 
    Erlang/OTP 18 [erts-7.0] [source] [64-bit] [smp:4:4] [async-threads:10] 
    [kernel-poll:false] 

    Eshell V7.0 (abort with ^G) 
    1> 
+0

решаемый для моей цели используя несколько -эвальных аргументов, переданных в erl. Получил решение из аналогичного сообщения http://stackoverflow.com/questions/16871832/erlang-invoking-erl-eval-from-command-line-never-exits. Все еще не уверен, почему выше ** не удалось ** методы не работали – DevMinz

ответ

2

Вам нужно обернуть переменные подстановки в кавычках, так что они послали в качестве единственного аргумента в erl:

EVAL_EXP2="ok, observer:start(), ok" 
erl -eval "$EVAL_EXP2" 
+0

Спасибо, это сэкономило мое время. – DevMinz