2012-03-14 13 views
2

나는 보석에서 함수를 수행하는 쉘 명령을 만들 수있는 보석을 만들고있다. 좀 더 간단한 맥락에서 쉘 명령이 트리거 될 때 옵션을 사용하여 루비 함수를 수행하는 쉘 스크립트를 만들어야합니다. 가장 쉬운 방법은 무엇입니까? 예를 들어Ruby를 지원하는 셸 명령을 만드는 방법은 무엇입니까?

:

$ cow moo 

는 소 명령에 대한 스크립트 소 보석을 가지고 루비 보석에서 '무'기능을 수행한다.

내가 할 수있는 경우에, 나는 것 또한 셸에서 일반적인 '옵션'형식에 대한 지원 등이 위의 예제는 루비 스크립트를 옵션을 가지고 적용됩니다

$ cow -t moo 

그것을 처리하기 위해 (예 : -t은 'moo'를 두 번 인쇄합니다.

누구나 도움이 될 수 있다면 큰 도움이 될 것입니다. 감사!

#!/usr/bin/env ruby 
require 'cow' 

Cow.say ARGV.first 

참고 shebang line 첫 번째 라인 :

답변

2

어떻게 http://visionmedia.github.com/commander/을 사용하는 방법에 대해 : 당신은 Bundler를 통해 실행 파일을 실행해야? 전에는 사용하지 마십시오. 하지만 커맨드 라인 앱을 쉽게 개발할 수있는 보석입니다.

는 여기에 잔뜩 더있다 : 팁을위한 https://www.ruby-toolbox.com/categories/CLI_Option_Parsers

+0

아니오, 나는 그들과 아무런 경험이 없다고 말했다. 그러나 나는 그것이 가능하다고 생각할 것이다. 아마도 보석의 소스 코드를 확인하고 프레임 워크를 테스트하기 위해 테스트를 작성하는 방법을 확인하십시오. – SpoBo

+0

@Beakr, 당신은 루비 보석에 넣지 않고 보석을 만들고 설치하거나 Bundler를 사용할 수 있습니다. 자세한 내용은 내 대답 읽기. –

5

당신은 포함 cow라는 일반 실행 루비 파일을 만들 수 있습니다. 스크립트를 해석하기 위해 사용할 프로그램을 쉘에게 알려줍니다. 이를 통해 사용자는 ruby $(which cow) 대신 cow으로 간단히 전화 할 수 있습니다.

bin 디렉토리에 스크립트를 넣어 :

Gem::Specification.new 'cow' do |gem| 
    gem.executables = %w(bin/cow) 
end 

설치하는 동안, 젬이 보석의 바이너리를 설치합니다 :

cow/ 
    bin/ 
    cow <- your executable file 
    lib/ 
    cow.rb 
    cow/ 
     say.rb 
    cow.gemspec 

을 이제 당신이해야 할 모든 당신의 보석 사양에 있음을 넣어 사용자 경로의 어딘가에서 찾을 수 있습니다.

옵션 구문 분석의 경우 표준 라이브러리에는 optparse이 포함되어 있지만 many gems도 있습니다.

나는 내 자신의 유틸리티에서 사용하는 my own option parser, called Acclaim을 만들었습니다. 다음은 샘플입니다 :

class Cow::Command < Acclaim::Command 
    option :all_caps, '-A', '--all-caps' 

    when_called do |options, args| 
    text = args.first.to_s 
    text.upcase! if options.all_caps? 
    Cow.say text 
    end 
end 

, 당신은 단순히 스크립트를 실행할 수있는 응용 프로그램을 테스트하기 위해서 :

$ pwd 
~/projects/cow 
$ ./bin/cow moo 
# output here... 

그러나, 이것은 당신이 사양에서 보석을 구축하고 로컬마다 설치해야합니다 변경 사항을 테스트 할 :

ruby -I ./lib -r cow -e 'puts Cow.version' 
0.0.1 
gem build cow.gemspec && gem install cow-0.0.1.gem 

Bundler 자동으로 부하 경로에 코드를 삽입하여 생활 쉬워집니다

.

$ bundle exec ./bin/cow moo 
# output here... 
+1

감사합니다. – beakr

관련 문제