当我使用bundle exec
调用命令时,它会接受我传入的参数。例如:
bundle exec my_command run --verbose
在这种情况下,--verbose
用作捆绑器参数,因为它应该用于my_command
。我知道以下方法可行:
bundle exec 'my_command run --verbose'
是否可以避免引用?我使用的命令已经有很多引号。我希望这样的东西能起作用,但事实并非如此:
bundle exec -- my_command run --verbose
对于bundler,我没有看到太多关于此的文档。任何想法都将不胜感激。
答案 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
的命令链。 exec
是bundle
的子命令,my_command
是exec
的参数。 my_command
的参数,以及bundle
或exec
都不需要了解它们,因此--
会将您要将参数链断开到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