为什么“捆绑exec”吃掉我传入的参数?

时间:2013-07-04 01:04:35

标签: ruby gem exec bundle bundler

当我使用bundle exec调用命令时,它会接受我传入的参数。例如:

bundle exec my_command run --verbose

在这种情况下,--verbose用作捆绑器参数,因为它应该用于my_command。我知道以下方法可行:

bundle exec 'my_command run --verbose'

是否可以避免引用?我使用的命令已经有很多引号。我希望这样的东西能起作用,但事实并非如此:

bundle exec -- my_command run --verbose

对于bundler,我没有看到太多关于此的文档。任何想法都将不胜感激。

2 个答案:

答案 0 :(得分:11)

这看起来像在shell中将一个命令传递给另一个命令时常见的问题,看起来你接近我使用的东西。而不是使用:

bundle exec my_command run --verbose

或者:

bundle exec -- my_command run --verbose

尝试:

bundle exec my_command -- run --verbose

使用bundle exec --打破bundle exec的命令链。 execbundle的子命令,my_commandexec的参数。 my_command的参数,以及bundleexec都不需要了解它们,因此--会将您要将参数链断开到bundle的位置}。

答案 1 :(得分:2)

source of bundler进行检查,将bundle exec之后的所有参数传递给Kernel.exec是默认行为,因此--verbose参数将传递给您的命令,而不是{ {1}}。

bundle

将在bundle

的上下文中运行以下命令
bundle exec my_command run --verbose

Kernel.exec('my_command', 'run', '--verbose')

导致错误,因为没有命令/脚本被命名为bundle exec -- my_command run --verbose

在此查看测试用例:

--

试验:

#!/usr/bin/env ruby
# coding: utf-8
# file: test.rb

p ARGV