설치된 경우 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

그것은 bash 함수이며 bash 함수에 인수를 전달하기 위해 필요하지 않습니다 (). 또한 함수는 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.