bash 스크립트에서 루비 젬이 설치되어 있는지 확인


14

bash 스크립트에서 특정 Ruby gem이 설치되어 있는지 확인해야합니다.

나는 다음과 같은 것을 할 수 있다고 생각했다.

if ! gem list <name>; then do_stuff; fi

그러나 명령 줄에서 테스트 하면 이름이 실제로 있는지 여부에 관계없이 0 echo $?gem list <name>반환합니다.

이것은 gem 목록의 출력을 필터링하기 위해 grep을 사용해야합니까, 아니면 gem이 설치되어 있는지 확인할 수있는 더 좋은 방법이 있습니까?

답변:


26

gem list <name> -itruegem이 설치되어 있으면 문자열을 반환합니다 false. 또한 리턴 코드가 예상됩니다.

자세한 내용은을 참조하십시오 gem help list.


편집 : @Riateche는 올바르게 설치된 보석의 하위 문자열 인 보석 이름을 검색하면 잘못된 긍정을 줄 수 있음을 올바르게 관찰했습니다. 이를 피하려면 정규식 구문을 사용하십시오.

gem list '^<name>$' -i

(예 :) gem list '^mini$' -i.


1
특정 버전이 설치되어 있는지 확인하려면을 추가하십시오 --version(예 :) gem list -i compass --version 0.12.4.
moeffju

6

gem spec명명 된 gem이 설치되어 있지 않으면 명령이 오류와 함께 실패 하는 것처럼 보입니다 . 그래서:

if ! gem spec <name> > /dev/null 2>&1; then
  echo "Gem <name> is not installed!"
fi

이것이 이것을 해결하는 정식 방법인지는 모르겠지만 작동합니다.


3

query부속 명령을 명령에 사용할 수도 있습니다 gem.

$ gem query -i -n bundler 
true
사용 발췌
$ gem help query
Usage: gem query [options]

  Options:
    -i, --[no-]installed             Check for installed gem
    -I                               Equivalent to --no-installed
    -v, --version VERSION            Specify version of gem to query
                                     for use with --installed
    -n, --name-matches REGEXP        Name of gem(s) to query on matches the
                                     provided REGEXP

또한 -v스위치를 사용하여 특정 버전도 찾습니다 .

$ gem query -i -n bundler -v 1.6.2.1
false

1
downvote에 대한 사과이지만 gem query" 맨 페이지 "에 명시된대로 : "query 명령은 list 및 search 명령의 기초입니다. 실제로 list 및 search 명령을 사용해야합니다.이 명령은 사용하기가 너무 어렵습니다." ... SO 커뮤니티에서 나쁜 습관을 만들고 싶지 않습니다! :-)
pvandenberk
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.