ตรวจสอบว่าติดตั้งพลอยทับทิมจากสคริปต์ทุบตี


14

ฉันต้องตรวจสอบเพื่อดูว่ามีการติดตั้งอัญมณีทับทิมจากสคริปต์ทุบตีหรือไม่

ฉันคิดว่าฉันสามารถทำอะไรบางอย่างเช่น

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

แต่การทดสอบในบรรทัดคำสั่งที่ใช้echo $?แสดงให้เห็นว่าgem list <name>ผลตอบแทน 0 โดยไม่คำนึงถึงว่าชื่อจะพบจริง

นี่หมายความว่าฉันต้องใช้ grep เพื่อกรองผลลัพธ์ของรายการ gem หรือมีวิธีที่ดีกว่าที่ฉันสามารถตรวจสอบเพื่อดูว่าติดตั้ง gem หรือไม่

คำตอบ:


26

gem list <name> -iจะคืนค่าสตริงtrueหากติดตั้ง gem falseแล้ว นอกจากนี้โค้ดส่งคืนคือสิ่งที่คุณคาดหวัง

gem help listสำหรับข้อมูลเพิ่มเติมโปรดดูที่


แก้ไข: @Riatecheอย่างถูกต้องสังเกตว่าสิ่งนี้อาจให้ผลบวกปลอมหากคุณค้นหาชื่ออัญมณีที่เป็นสตริงย่อยของอัญมณีที่ติดตั้งเป็นอย่างอื่น เพื่อหลีกเลี่ยงปัญหานี้ให้ใช้ไวยากรณ์ของ regex:

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 แต่ตามที่ระบุไว้ใน man page สำหรับgem query: "คำสั่ง query เป็นพื้นฐานสำหรับคำสั่ง list และ search คุณควรใช้คำสั่ง list และ search แทนจริงๆคำสั่งนี้ยากเกินไปที่จะใช้" ... ไม่ต้องการสร้างนิสัยที่ไม่ดีในชุมชน SO! :-)
pvandenberk
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.