`apt-get` 및 와일드카드: glob과 정규식

`apt-get` 및 와일드카드: glob과 정규식

편집하다apt-get: 아래에 쓰여진 것처럼 정규식을 사용하여 패키지 이름을 해석하는 방법 을 설명하는 이 사이트의 답변을 알고 있습니다 . 실제로 문제는 실제 동작이 문서화된 동작과 다른 방식에 관한 것입니다. 중복을 제안하기 전에 질문을 읽어보십시오.


이 사이트의 일부 답변은 apt-get와일드카드(예: 별표: *)를 사용하는 것에 대해 경고합니다. 왜냐하면 와일드 apt-get카드를 정규 표현식으로 확장하여 특히 를 사용하면 예기치 않은(그리고 원하지 않는) 결과가 발생할 수 있기 때문입니다 apt-get remove. 물론,우분투 man페이지apt-get읽는다:

주어진 표현식과 일치하는 패키지가 없고 표현식에 '.', '?' 중 하나가 포함된 경우 또는 '*'인 경우 POSIX 정규식으로 간주되어 데이터베이스의 모든 패키지 이름에 적용됩니다. 그런 다음 모든 일치 항목이 설치(또는 제거)됩니다. 일치는 하위 문자열로 수행되므로 'lo.*'는 'how-lo' 및 'lowest'와 일치합니다. 이것이 바람직하지 않은 경우 정규식을 '^' 또는 '$' 문자로 고정하거나 보다 구체적인 정규식을 만드십시오.

사실은,이 답변주장:

apt-get은 쉘로 glob 패턴이 아닌 정규식을 허용합니다.

나는 이것이 (적어도 Xenial의 경우) 잘못되었다고 생각합니다. 예를 들어 다음 동작을 재현할 수 있습니다.

$ sudo apt-get install -s 'meld*'
[...]
Note, selecting 'meld' for glob 'meld*'
[...]

$ sudo apt-get install -s 'meldt*'
[...]
Note, selecting 'python-meld3' for regex 'meldt*'
Note, selecting 'python3-meld3' for regex 'meldt*'
Note, selecting 'meld' for regex 'meldt*'
[...]

(나는 일치하는 항목을 제거하지 않았으며 apt-get님의 응답 중 관련 없는 부분만 제거했습니다.)

apt-get이 동작을 기반으로 처음에는 주어진 표현식을 glob으로 일치시키려고 시도하고 실패할 경우에만 정규식으로 다시 시도하는 것 같습니다 .

내가 그럴 권리가 있나요? 내가 man페이지를 잘못 이해한 걸까요, 아니면 이 동작이 잘못 문서화되어 있는 걸까요?

답변1

이에 대한 설명은apt(8)맨페이지:

install, remove, purge (apt-get(8))
   Performs the requested action on one or more packages specified via
   regex(7), glob(7) or exact match. The requested action can be
   overridden for specific packages by append a plus (+) to the
   package name to install this package or a minus (-) to remove it.

이 단락은15.10 맨페이지이므로 16.04에 추가되었을 수 있습니다.

이것은 apt의 변경 로그에 언급되지 않은 것 같습니다.2013년에 이것을 추가한 커밋맨 페이지에 변경 사항이 표시되지 않습니다. 이는 잠시 비활성화되었다가 나중에 다시 활성화되었습니다(참조:2014년 5월부터 2월 사이에 커밋됨), 그리고비활성화는 변경 로그에 언급되어 있습니다.

그래서 이것은 4년 전에 추가되었을 수도 있지만2015년에만 문서화됨. 그리고 apt-get의 맨페이지는 여전히 무시되고 있습니다.

관련 정보