使用bash脚本中的文件pather args运行ruby脚本

时间:2011-10-24 13:49:17

标签: ruby bash scripting

我正在使用bash脚本启动ruby脚本。 如果你在脚本的先生,这非常有效,但如果你不在那个目录,脚本行为很有趣,因为它不在文件路径上。

#!/bin/sh
jruby -Ilib script.rb $@

我将此添加到脚本中。

mypath=`realpath $0`

cd `dirname $mypath`/..

它使脚本从我想要的任何地方运行。问题是它的参数没有改变它们的相对路径名。

我正在使用trollop进行输入解析。

我的问题是:如何更改输入中路径的输入,以便在将args推送到ruby脚本时它将是正确的相对路径。 我很乐意解决这个问题。

2 个答案:

答案 0 :(得分:1)

具体使用bash。它汇集了一个参数数组,为每个参数调用realpath

#!/bin/bash
mypath=$(realpath $0)
args=()
for arg; do
  args+=( "$(realpath "$arg")" )
done
cd "$(dirname "$mypath")"/..

jruby -Ilib script.rb "${args[@]}"

我在脚本中自由地使用双引号来处理包含空格的文件和路径。

答案 1 :(得分:0)

我最终这样做了,

我发现使用环境变量效果最好

#!/bin/bash

if [ "$EN_VARE"="" ]
then
 EN_VARE="."
fi

jruby -I$EN_VARE/lib $EN_VARE/lib/main_file.rb $@