2013-07-04 18 views
9

Khi tôi gọi lệnh sử dụng bundle exec phải mất các thông số tôi vượt qua trong Một ví dụ cho điều này sẽ là:.Tại sao "bó exec" ăn các thông số tôi chuyển vào?

bundle exec my_command run --verbose 

Trong trường hợp này --verbose được sử dụng như một đối số bundler nơi như nó phải được sử dụng cho my_command. Tôi biết cách sau đây sẽ hoạt động:

bundle exec 'my_command run --verbose' 

Có thể tránh báo giá không? Lệnh tôi sử dụng đã có rất nhiều dấu ngoặc kép. Tôi mong đợi một cái gì đó như thế này sẽ làm việc nhưng nó đã không:

bundle exec -- my_command run --verbose 

Tôi không thấy nhiều tài liệu về điều này cho bundler. bất kì ý kiến ​​nào đều được đánh giá cao.

+0

Tôi không gặp phải vấn đề này, bạn đang sử dụng phiên bản bundler nào? – Shelvacu

+0

Tôi đang sử dụng phiên bản gói 1.3.5 – arangamani

Trả lời

2

Kiểm tra từ source of bundler, đó là hành vi mặc định để vượt qua tất cả các thông số sau bundle exec-Kernel.exec, vì vậy các thông số --verbose sẽ được chuyển đến lệnh của bạn, không bundle.

bundle exec my_command run --verbose 

sẽ chạy sau trong bối cảnh bó

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

bundle exec -- my_command run --verbose 

kết quả trong một lỗi bởi vì không có lệnh/script được đặt tên --.

Kiểm tra các trường hợp thử nghiệm ở đây:

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

p ARGV 

kiểm tra:

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

này trông giống như là những gì một vấn đề thường gặp khi đi qua một lệnh khác trong vỏ, và có vẻ như bạn' gần với những gì tôi muốn sử dụng. Thay vì sử dụng:

bundle exec my_command run --verbose 

Hoặc:

bundle exec -- my_command run --verbose 

Hãy thử:

bundle exec my_command -- run --verbose 

Sử dụng bundle exec -- phá vỡ lệnh chuỗi cho bundle exec. exec là một lệnh phụ cho bundlemy_command là thông số cho exec. Các tham số cho my_command, tốt, không phải bundle hoặc exec cần biết về chúng để -- chuyển đến nơi bạn muốn ngắt chuỗi tham số đó thành bundle.

+0

Ví dụ: để chạy một ActiveSupport :: TestCase 'gói exec ruby ​​cụ thể - test/unit/class_test.rb -n '/ test_a_method /'' – eebbesen

Các vấn đề liên quan