nte*_*rry 5 ruby runtime-error limit string-interpolation backticks
好的,所以我尝试执行以下代码:
Run Code Online (Sandbox Code Playgroud)`#{@daemon_path} --name=#{@app_name} --command=#{@java_path} -- -jar #{jetty_jar} #{@war_path} #{random_port}` sleep(10) #give war time to error out and die if its going to `#{@daemon_path} --running --name=#{@app_name}`
变量值为:
我收到此错误(检查了 bash 中的命令,它们工作正常):
无效参数:未提供命令
用法:daemon [选项] [--] [cmd arg...]
我通过在上述命令周围添加引号来修复上述错误,如下所示:
"`#{@daemon_path} --name=#{@app_name} --command=#{@java_path} -- -jar #{jetty_jar} #{@war_path} #{random_port}`"
"`#{@daemon_path} --running --name=#{@app_name}`"
Run Code Online (Sandbox Code Playgroud)
好的,代码执行后,我用 $? 检查输出?并注意 0 返回代码。它应该是 1。我在 bash 中运行它,得到 1。如果我手动为每个变量输入所有正确的值,它就会正常工作。
此外,如果我执行脚本,则传入所有值,如下所示:
`./daemon_script_file #{@daemon_path} #{@app_name} #{@java_path} #{jetty_jar} #{@war_path} #{random_port}`
Run Code Online (Sandbox Code Playgroud)
到脚本守护程序脚本文件:
#!/bin/bash
set -x
d_bin=$1
name=$2
cmd=$3
jar=$4
war=$5
port=$6
$d_bin --name=$name --command=$cmd -- -jar $jar $war $port
sleep 10
$d_bin --name=$name --running
result=$?
exit $result
Run Code Online (Sandbox Code Playgroud)
我得到以下调试跟踪输出:
+ d_bin=/usr/bin/daemon
+ name=
+ cmd=
+ jar=
+ war=
+ port=
+ /usr/bin/daemon --name= --command= -- -jar
+ sleep 10
+ /usr/bin/daemon --name= --running
+ result=1
+ exit 1
sh: 2: foobarbazquux: not found
invalid file (bad magic number): Exec format error
Run Code Online (Sandbox Code Playgroud)
有人知道为什么吗?我在这里做了一些非常愚蠢的事情吗?
作为旁注,字符串:
"#{@daemon_path} --name=#{@app_name} --command=#{@java_path} -- -jar #{jetty_jar} #{@war_path} #{random_port}"
Run Code Online (Sandbox Code Playgroud)
决心:
"/usr/bin/daemon --name=foobarbazquux --command=/usr/java/jdk1.7.0_21/bin/java -- -jar /home/nterry/JettyContainer-1.0.b4-jar-with-dependencies.jar /home/nterry/helloworld.war 8080"
Run Code Online (Sandbox Code Playgroud)
哪个是完全正确的