2013-07-04 20 views
9

Podczas wywoływania poleceń bundle exec trwa parametry przechodzę w Przykładem byłoby.Dlaczego "bundle exec" je parametry, które przekazuję?

bundle exec my_command run --verbose 

--verbose W tym przypadku stosuje się jako argument Bundler gdzie jako powinien być używany do my_command. Wiem, że zadziałałby następujący sposób:

bundle exec 'my_command run --verbose' 

Czy można uniknąć cytatów? Polecenie, którego używam, ma już wiele cytatów. Spodziewałem się, że coś takiego zadziała, ale nie:

bundle exec -- my_command run --verbose 

Nie widzę zbyt wiele dokumentacji na ten temat dla bundler. Wszelkie pomysły będą mile widziane.

+0

Nie mam tego problemu, jakiej wersji używasz bundler? – Shelvacu

+0

Używam programu bundler w wersji 1.3.5 – arangamani

Odpowiedz

2

Kontrola z source of bundler, jest to domyślne zachowanie, aby przekazać wszystkie parametry po bundle exec do Kernel.exec, więc parametry --verbose zostaną przekazane do komendy, a nie bundle.

bundle exec my_command run --verbose 

uruchomi następujące pod ramach pakietu

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

i

bundle exec -- my_command run --verbose 

powoduje błąd, ponieważ żadna komenda/skrypt o nazwie --.

Sprawdź sprawdzian tutaj:

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

p ARGV 

Test:

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

to wygląda, co jest częstym problemem podczas przechodzenia jednego polecenia do drugiego w powłoce, a wygląda jak ty” zbliż się do tego, czego bym użył. Zamiast używać:

bundle exec my_command run --verbose 

czyli

bundle exec -- my_command run --verbose 

Spróbuj:

bundle exec my_command -- run --verbose 

Korzystanie bundle exec -- przerwy polecenie łańcuchach dla bundle exec. exec to podkomunikator dla bundle i my_command jest parametrem dla exec. Parametry dla my_command, dobrze, ani ani exec muszą o nich wiedzieć, aby -- trafił tam, gdzie chcesz przełamać ten łańcuch parametrów do bundle.

+0

Na przykład, aby uruchomić konkretny pakiet 'ActiveSupport :: TestCase' pakietu ruby ​​- test/unit/class_test.rb -n '/ test_a_method /' ' – eebbesen

Powiązane problemy