脚本适用于shell但不适用于Ruby

时间:2016-08-17 21:06:25

标签: ruby bash shell

我有一个脚本可以填写多个spark-submit作业的参数。当我将它们复制并粘贴到shell中时,作业会起作用,但是当我将字符串放入反引号并从Ruby中执行时,它们会失败。

spark-submit --master yarn-cluster \
  --num-executors 2 \
  --files ... \
  --class ... \
  -otherflags ...

Ruby返回

sh: 1: spark-submit: not found

即使spark-submit在系统路径中。更令人困惑的是:

`spark-submit` 
Ruby中的

似乎正确调用了shell命令。

1 个答案:

答案 0 :(得分:2)

当你在shell中的命令行时,与在Ruby中运行代码时相比,请考虑一下它们的不同之处。

shell定义了PATH,它会查找命令,希望最终找到所需命令。

Ruby不会这样做,而是需要定义可执行文件的绝对路径。有多种方法可以做到,但最简单的方法是使用

where spark-submit

在命令行中,然后将其复制/粘贴到Ruby脚本中。最有可能的是你会得到类似的东西:

/usr/local/bin/spark-submit

/path/to/rubys/gems/.../bin/spark-submit
  

spark-submit

     Ruby中的

似乎正确调用了shell命令。

Ruby正试图在当前目录中找到该命令。