从bash变量传递Erlang erl的-eval失败
我试图从bash脚本启动erl。当我从变量传递eval表达式内容时,erl无法启动。当eval选项直接 在erl命令行中给出,erl启动时没有任何问题。 如何做正确从bash变量传递Erlang erl的-eval失败,bash,erlang,erl,Bash,Erlang,Erl,我试图从bash脚本启动erl。当我从变量传递eval表达式内容时,erl无法启动。当eval选项直接 在erl命令行中给出,erl启动时没有任何问题。 如何做正确 #!/bin/bash echo "-----------------------------------" # # Fails EVAL_EXP1="\"ok, observer:start(), ok\"" echo $EVAL_EXP1 erl -eval $EVAL_EXP1 # # Fails echo "-----
#!/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>
13:30$./start.sh
-----------------------------------
“好,观察者:开始(),好”
正在将崩溃转储写入:erl_Crash.dump…完成
系统进程已终止:{function_子句,
[{init,prepare_run_args,[{eval,[>]}],[]},{init,map,2,[]},{init,boot,1,[]}
./start.sh:第7行:26573中止(堆芯转储)erl-eval$eval_EXP1
-----------------------------------
好的,观察者:开始(),好的
(不存在错误记录器)错误:
正在将崩溃转储写入:erl_Crash.dump…完成
系统进程已终止:{function_子句,
[{init,prepare\u run\u args,[{eval,[,,,
]}],[]},{init,map,2,[]},{init,boot,1,[]}
./start.sh:第13行:26599中止(堆芯卸载)erl-eval
$EVAL_EXP2
-----------------------------------
Erlang/OTP 18[erts-7.0][source][64位][smp:4:4][async threads:10]
[内核轮询:false]
Eshell V7.0(使用^G中止)
1>
您需要将变量替换用引号括起来,以便将它们作为单个参数发送到erl
:
EVAL_EXP2="ok, observer:start(), ok"
erl -eval "$EVAL_EXP2"
使用传递给erl的多个eval参数解决了我的问题。从类似的帖子中得到了解决方案。仍然不确定为什么上述失败的方法不起作用