2011-10-24 107 views
1

我正在使用bash脚本启动ruby脚本。 如果您在脚本的先生中,这很有效,但如果您不在该脚本中,脚本会变得很有趣,因为它不在文件路径中。从bash脚本运行ruby脚本与文件pather参数

#!/bin/sh 
jruby -Ilib script.rb [email protected] 

我将此添加到脚本。

mypath=`realpath $0` 

cd `dirname $mypath`/.. 

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

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

我的问题是:如何在输入中更改路径的输入,以便在将参数推送到ruby脚本时它将成为正确的相对路径。 我会很高兴与这个问题的红宝石修复。

回答

1

这个特别使用bash。它汇编了一个参数数组,每个都调用realpath

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

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

我在处理文件和包含空格的路径中大量散布了双引号。

+0

谢谢,我想我可以用你的回答只是ARGS是路径到args作为我的红宝石脚本,只是通过其余的。 – defenistrator

0

最后我做这种方式,

我发现使用环境变量工作过的最好的

#!/bin/bash 

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

jruby -I$EN_VARE/lib $EN_VARE/lib/main_file.rb [email protected]