2013-07-04 12 views
9

Quando invoco comandi usando bundle exec prende i parametri che passa un esempio di questo potrebbe essere:.Perché "bundle exec" mangia i parametri che ho inserito?

bundle exec my_command run --verbose 

In questo caso --verbose viene utilizzato come argomento fardellatrice dove come dovrebbe essere utilizzato per my_command. So che il seguente modo funzionerebbe:

bundle exec 'my_command run --verbose' 

È possibile evitare le virgolette? Il comando che uso ha già molte virgolette. Mi aspettavo che qualcosa del genere avrebbe funzionato ma non funzionava:

bundle exec -- my_command run --verbose 

Non vedo molta documentazione su questo per bundler. Qualsiasi idea sarebbe molto apprezzata.

+0

Non ho questo problema, quale versione di bundler stai usando? – Shelvacu

+0

Utilizzo la versione bundler 1.3.5 – arangamani

risposta

2

Ispezione da source of bundler, è un comportamento di default di trasmettere tutti i parametri dopo bundle exec-Kernel.exec, in modo che i parametri --verbose verrà passato al comando, non bundle.

bundle exec my_command run --verbose 

verrà eseguito il seguente nel contesto del fascio

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

e

bundle exec -- my_command run --verbose 

risultati in un errore perché nessun comando/script è denominato --.

Controllare il banco di prova qui:

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

p ARGV 

prova:

$ bundle exec ruby test.rb --verbose --arg1 
["--verbose", "--arg1"] 
11

Questo appare come quello che è un problema comune quando passa un comando a un altro nella shell, e sembra che si' sono vicino a quello che userei. Invece di usare:

bundle exec my_command run --verbose 

Oppure:

bundle exec -- my_command run --verbose 

Prova:

bundle exec my_command -- run --verbose 

Utilizzando bundle exec -- rompe il comando a catena per bundle exec. exec è un sottocomando per bundle e my_command è un parametro per exec. I parametri per my_command, beh, né bundle o exec devono essere informati su di essi in modo che lo -- vada dove si desidera interrompere quella catena di parametri su bundle.

+0

Ad esempio, per eseguire uno specifico ActiveSupport :: TestCase 'bundle exec ruby ​​- test/unit/class_test.rb -n '/ test_a_method /'' – eebbesen

Problemi correlati