Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Why does "bundle exec" eat the parameters I pass in?

When I invoke commands using bundle exec it takes the parameters I pass in. An example for this would be:

bundle exec my_command run --verbose

In this case --verbose is used as a bundler argument where as it should be used for my_command. I know the following way would work:

bundle exec 'my_command run --verbose'

Is it possible to avoid the quotes? The command I use has already a lot of quotes. I expected something like this would work but it didn't:

bundle exec -- my_command run --verbose

I don't see much documentation about this for bundler. Any ideas would be greatly appreciated.

like image 760
arangamani Avatar asked Jul 04 '13 01:07

arangamani


2 Answers

This looks like what is a common problem when passing one command to another in the shell, and it looks like you're close to what I'd use. Instead of using:

bundle exec my_command run --verbose

Or:

bundle exec -- my_command run --verbose

Try:

bundle exec my_command -- run --verbose

Using bundle exec -- breaks the command-chain for bundle exec. exec is a sub-command for bundle and my_command is a parameter for exec. The parameters for my_command, well, neither bundle or exec needs to know about them so the -- goes where you want to break that chain of parameters to bundle.

like image 186
the Tin Man Avatar answered Oct 16 '22 12:10

the Tin Man


Inspecting from source of bundler, it is default behavior to pass all the parameters after bundle exec to Kernel.exec, so the --verbose parameters will be passed to your command, not bundle.

bundle exec my_command run --verbose

will run the following under the context of bundle

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

and

bundle exec -- my_command run --verbose

results in an error because no command/script is named --.

Check the test case here:

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

p ARGV

test:

$ bundle exec ruby test.rb --verbose --arg1
["--verbose", "--arg1"]
like image 2
Arie Xiao Avatar answered Oct 16 '22 11:10

Arie Xiao