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

ara*_*ani 9 ruby gem bundle exec bundler

当我使用bundle exec它调用命令时,需要传入的参数.例如:

bundle exec my_command run --verbose
Run Code Online (Sandbox Code Playgroud)

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

bundle exec 'my_command run --verbose'
Run Code Online (Sandbox Code Playgroud)

是否有可能避免引用?我使用的命令已经有很多引号.我希望这样的东西可以工作,但它没有:

bundle exec -- my_command run --verbose
Run Code Online (Sandbox Code Playgroud)

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

the*_*Man 12

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

bundle exec my_command run --verbose
Run Code Online (Sandbox Code Playgroud)

要么:

bundle exec -- my_command run --verbose
Run Code Online (Sandbox Code Playgroud)

尝试:

bundle exec my_command -- run --verbose
Run Code Online (Sandbox Code Playgroud)

使用bundle exec --中断命令链bundle exec.exec是一个子命令bundle,my_command是一个参数exec.为参数my_command,那么,既不bundleexec需要知道他们这样--去哪里你想打破的参数,该链bundle.


Ari*_*iao 2

从bundler的源代码检查,默认行为是将所有参数传递bundle exec给to之后Kernel.exec,因此--verbose参数将传递给您的命令,而不是bundle

bundle exec my_command run --verbose
Run Code Online (Sandbox Code Playgroud)

将在捆绑包的上下文中运行以下命令

Kernel.exec('my_command', 'run', '--verbose')
Run Code Online (Sandbox Code Playgroud)

bundle exec -- my_command run --verbose
Run Code Online (Sandbox Code Playgroud)

导致错误,因为没有命名命令/脚本--

在这里检查测试用例:

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

p ARGV
Run Code Online (Sandbox Code Playgroud)

测试:

$ bundle exec ruby test.rb --verbose --arg1
["--verbose", "--arg1"]
Run Code Online (Sandbox Code Playgroud)