매번 설치하기 위해 수동으로 터미널에 들어갈 필요가 없도록 모든 python3 패키지를 설치하려고 합니다. 그러나 apt는 일부 종속성 문제로 인해 계속 진행을 거부합니다.
sonic@boomboom:~$ sudo apt install python3*
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
Note, selecting 'python3-trufont' for glob 'python3*'
(Long list of packages)
Some packages could not be installed. This may mean that you have
requested an impossible situation or if you are using the unstable
distribution that some required packages have not yet been created
or been moved out of Incoming.
The following information may help to resolve the situation:
The following packages have unmet dependencies:
python3-chargebee : Conflicts: python3-chargebee2 but 2.7.3-1 is to be installed
(Long list of packages)
E: Unable to correct problems, you have held broken packages.
따라서 나는 출력을 구문 분석 apt
하고 내 glob과 일치하는 모든 패키지(제거 가능한 패키지 제외)를 자동으로 설치하는 짧은 스크립트를 작성하기로 결정했습니다. 먼저 grep
원치 않는 패키지만 필터링해 보았습니다.
sonic@boomboom:~$ sudo apt install python3* | grep 'Conflicts:'
WARNING: apt does not have a stable CLI interface. Use with caution in scripts.
python3-chargebee : Conflicts: python3-chargebee2 but 2.7.3-1 is to be installed
python3-chargebee2 : Conflicts: python3-chargebee but 1.6.6-1 is to be installed
(Long list of packages)
E: Unable to correct problems, you have held broken packages.
Grep은 작동하지만 경고 메시지가 나타나고 흥미롭게도 Grep을 사용할 때 나타나지 않습니다 apt-get
.
sonic@boomboom:~$ sudo apt install python3* | grep 'Conflicts:'
python3-chargebee : Conflicts: python3-chargebee2 but 2.7.3-1 is to be installed
python3-chargebee2 : Conflicts: python3-chargebee but 1.6.6-1 is to be installed
(Long list of packages)
E: Unable to correct problems, you have held broken packages.
경고 메시지를 제외하고 출력은 정확히 동일합니다. apt
개발자가 경고를 추가하게 만든 파이프라인의 보안 영향은 무엇입니까? 왜 apt-get
같은 경고를 하지 않습니까? 나는 이 두 명령이 거의 동일하다고 생각합니다.
답변1
출력을 구문 분석하지 않으면 apt
안전하게 사용할 수 있습니다. 경고를 발령하는 주요 이유는 다음과 같습니다.apt
대화형 사용을 위한 것:
apt
패키지 관리 시스템을 위한 고급 명령줄 인터페이스를 제공합니다. 이는 최종 사용자 인터페이스 로 고안되었으며apt-get(8)
, .apt-cache(8)
출력이 터미널이 아닌 경우 대화형으로 사용되지 않는 것으로 가정하고 경고를 표시합니다. 귀하의 경우에는 위험이 없습니다.