2013-07-04 7 views
9

Wenn ich Befehle aufrufen bundle exec verwenden es nimmt die Parameter I in passieren Ein Beispiel dafür wäre:.Warum isst "bundle exec" die Parameter, die ich übergebe?

bundle exec my_command run --verbose 

In diesem Fall --verbose als Bündler Argument verwendet wird, wo, wie es für my_command verwendet werden soll. Ich weiß der folgende Weg würde funktionieren:

bundle exec 'my_command run --verbose' 

Ist es möglich, die Anführungszeichen zu vermeiden? Der Befehl, den ich verwende, hat bereits viele Anführungszeichen. Ich erwartete, dass etwas wie das funktionieren würde, aber es tat nicht:

Ich sehe nicht viel Dokumentation darüber für Bundler. Irgendwelche Ideen würden sehr geschätzt werden.

+0

Ich habe dieses Problem nicht, welche Version von Bundler verwenden Sie? – Shelvacu

+0

Ich benutze Bündler Version 1.3.5 – arangamani

Antwort

2

Inspizieren von source of bundler ist es Standardverhalten alle Parameter nach bundle exec-Kernel.exec passieren, so dass die --verbose Parameter auf Ihren Befehl übergeben werden, nicht bundle.

bundle exec my_command run --verbose 

die folgenden im Kontext des Bündels

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

und

bundle exec -- my_command run --verbose 

führt zu einem Fehler führen, da kein Befehl/script -- gestattet.

Überprüfen Sie den Testfall hier:

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

p ARGV 

Test:

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

Das sieht aus wie, was ist ein häufiges Problem, wenn ein Befehl zum anderen in der Schale vorbei, und es sieht aus wie Sie‘ in der Nähe von dem, was ich verwenden würde. Anstelle der Verwendung von:

bundle exec my_command run --verbose 

Oder:

bundle exec -- my_command run --verbose 

Versuchen:

bundle exec my_command -- run --verbose 

Mit bundle exec -- bricht die Befehlskette für bundle exec. exec ist ein Unterbefehl für bundle und my_command ist ein Parameter für exec. Die Parameter für my_command, gut, weder bundle noch exec müssen über sie wissen, so dass die -- geht, wo Sie diese Kette von Parametern zu bundle brechen möchten.

+0

Zum Beispiel, um eine bestimmte ActiveSupport :: TestCase 'Bündel exec ruby ​​- test/unit/class_test.rb -n '/ test_a_method /'' – eebbesen