เชลล์สคริปต์จะข้าม PPA ถ้าติดตั้ง


8

ฉันต้องการสร้างสคริปต์ที่จะเพิ่ม PPA ใหม่หรือข้ามหากติดตั้งแล้ว

มีคนโพสต์โซลูชันนี้ในคำถามอื่น:

#!/bin/bash 

add_ppa() {
      for i in "$@"; do
        grep -h "^deb.*$i" /etc/apt/sources.list.d/* > /dev/null 2>&1
        if [ $? -ne 0 ]
        then
          echo "Adding ppa:$i"
          sudo add-apt-repository -y ppa:$i
        else
          echo "ppa:$i already exists"
        fi
      done
    }

เชลล์สคริปต์เพื่อเพิ่มพื้นที่เก็บข้อมูล apt แบบมีเงื่อนไข

ในกรณีของฉันฉันต้องการที่จะเพิ่มppa:otto-kesselgulasch/gimp-edgeแต่ฉันไม่แน่ใจว่าฉันควรที่จะเพิ่มสิ่งนี้ในสคริปต์

ฉันพยายามadd_ppa(ppa:otto-kesselgulasch/gimp-edge)แต่ฉันได้รับข้อผิดพลาดว่า ( ppaเป็นชื่อของสคริปต์ของฉัน):

ppa: 1: ppa: Syntax error: word unexpected (expecting ")")

ฉันยังลองด้วยช่องว่างระหว่าง ppa และไม่มี ()

ppa: 1: ppa: add_ppa: not found
ppa: 12: ppa: Syntax error: "}" unexpected

ใครช่วยบอกฉันหน่อยได้มั้ยว่าฉันทำอะไรผิด


2
มันจะมีประโยชน์ในการแก้ไขคำถามของคุณเพื่อรวมสคริปต์ของคุณทำให้ง่ายต่อการวินิจฉัยว่าปัญหาอยู่ตรงไหน
Arronical

คำตอบ:


9

()นั่นคือฟังก์ชั่นการทุบตีและจะผ่านการขัดแย้งการทำงานทุบตีคุณไม่จำเป็นต้อง นอกจากนี้ฟังก์ชันยังเพิ่มส่วนppa:นำหน้าให้กับอาร์กิวเมนต์ดังนั้นสิ่งนี้จะทำ:

add_ppa otto-kesselgulasch/gimp-edge

นอกจากนี้ฟังก์ชันรองรับหลายอาร์กิวเมนต์ดังนั้นคุณสามารถเรียกใช้เป็น PPA ได้หลายรายการ:

add_ppa otto-kesselgulasch/gimp-edge foo/bar a/b

เนื่องจากคุณใส่ฟังก์ชันไว้ในสคริปต์คุณควร:

  • แหล่งที่มามันเป็น Zanna แนะนำให้รับฟังก์ชั่นในเปลือกของคุณและเรียกใช้ฟังก์ชั่นหรือ
  • เพียงใช้เนื้อหาของฟังก์ชั่นเป็นสคริปต์:

    #! /bin/bash
    for i in "$@"; do
      if grep -Rq "^deb.*$i" /etc/apt/sources.list.d/*.list
      then
        echo "Adding ppa:$i"
        sudo add-apt-repository -y ppa:$i
      else
        echo "ppa:$i already exists"
      fi
    done
    

    และเรียกสคริปต์ด้วยชื่อ ppa:

    ppa otto-kesselgulasch/gimp-edge

3
ชนิดของโน้ตด้านข้างคุณสามารถวางin "$@"; for i; doวนซ้ำพารามิเตอร์ตำแหน่ง
Kevin

6

ฉันคิดว่าคุณกำลังเรียกใช้งานไฟล์เป็นสคริปต์ แต่เป็นเพียงนิยามฟังก์ชันดังนั้นฟังก์ชั่นนี้จะไม่ถูกเรียกใช้เมื่อเรียกใช้

คุณไม่จำเป็นต้องเพิ่มอะไรเข้าไป คุณไม่จำเป็นต้องเพิ่ม PPA ที่ใดก็ได้ข้างใน คุณสามารถsourceไฟล์แล้วเรียกใช้ฟังก์ชันในเชลล์ปัจจุบัน:

. ppa
add_ppa otto-kesselgulasch/gimp-edge

(สมมติว่าไฟล์ที่คุณบันทึกไว้เรียกว่าppaอยู่ในไดเรกทอรีการทำงานปัจจุบันและมีเนื้อหาเหมือนกับตัวอย่างที่คุณโพสต์ทุกประการ)

คุณสามารถเรียกใช้เป็นสคริปต์ได้หากคุณเพิ่มบรรทัดที่เรียกใช้ฟังก์ชันจริง คุณสามารถเขียนโค้ด PPA ลงไปได้โดยเพิ่มบรรทัดแบบนี้ในตอนท้าย:

add_ppa otto-kesselgulasch/gimp-edge

จากนั้นเรียกใช้สคริปต์ แต่ด้วยวิธีนี้คุณจะต้องแก้ไขไฟล์ทุกครั้งที่คุณต้องการเพิ่ม PPA ใหม่ ...

แต่คุณสามารถเรียกใช้ฟังก์ชันบนอาร์กิวเมนต์ทั้งหมดที่ส่งผ่านไปยังสคริปต์โดยเพิ่มบรรทัดดังนี้:

add_ppa "$@"

ดังนั้นเมื่อสคริปต์ถูกเรียก:

./ppa otto-kesselgulasch/gimp-edge thing/stuff etc/andSoOn

3

ดูเหมือนว่าคุณอาจพิมพ์ผิดในสคริปต์ของคุณโดยเฉพาะที่คำจำกัดความของadd_ppaฟังก์ชัน

ข้อความแสดงข้อผิดพลาด:

ppa: 1: ppa: add_ppa: not found
ppa: 12: ppa: Syntax error: "}" unexpected

บ่งชี้ว่า add_ppa ไม่ได้ถูกจดจำเป็นฟังก์ชัน

ดูเหมือนว่าคุณอาจใช้(แทน{เมื่อกำหนดฟังก์ชั่น แก้ไขข้อผิดพลาดนี้และฟังก์ชั่นควรจะทำงานได้อย่างถูกต้อง แต่ก็ควรจะใช้ตามที่ระบุไว้ใน Muru ของคำตอบ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.