通过旅行Ruby将参数传递给Ruby脚本

时间:2016-07-07 23:13:22

标签: ruby bash shell

我正在尝试将命令行参数传递给使用Traveling Ruby调用的Ruby脚本,并且无法使其正常工作。我只是将他们的标准wrapper.sh文件用于带有gem的脚本:

#!/bin/bash
set -e

# Figure out where this script is located.
SELFDIR="`dirname \"$0\"`"
SELFDIR="`cd \"$SELFDIR\" && pwd`"

# Tell Bundler where the Gemfile and gems are.
export BUNDLE_GEMFILE="$SELFDIR/lib/vendor/Gemfile"
unset BUNDLE_IGNORE_CONFIG

# Run the actual app using the bundled Ruby interpreter, with Bundler activated.
exec "$SELFDIR/lib/ruby/bin/ruby" -rbundler/setup "$SELFDIR/lib/app/test.rb"

当我运行它时,我的Ruby脚本没有看到任何命令行参数。我已经尝试将最后一行更改为:

exec "$SELFDIR/lib/ruby/bin/ruby" -rbundler/setup "$SELFDIR/lib/app/test.rb $@"

我觉得它会起作用,但是当我用arg“arg1”测试它时,它给了我错误:

/[pathtofile]/test-1.0.0-osx/lib/ruby/bin.real/ruby: No such file or directory -- /[pathtofile]/test-1.0.0-osx/lib/app/test.rb arg1 (LoadError)

所以它似乎将命令行参数视为文件名的一部分。

有没有办法修改此脚本以正确传入参数?

谢谢!

1 个答案:

答案 0 :(得分:2)

显然,我是个白痴。当然,它将参数视为文件名的一部分,因为$ @在引号内。正确修改最后一行以使一切正常工作:

exec "$SELFDIR/lib/ruby/bin/ruby" -rbundler/setup "$SELFDIR/lib/app/test.rb" $@