파일에서 패키지 목록을 제거하려고 합니다. 다음 명령을 사용하고 있습니다.
cat packages | xargs sudo apt-get remove
packages
내 파일에는 제거하려는 패키지 목록이 포함되어 있습니다. 모든 것이 작동하는 것 같지만 apt-get
예 또는 아니요를 선택할 수 있는 대신 중단됩니다.
해당 옵션을 사용하여 이 문제를 해결할 수 있다는 것을 알고 있지만 -y
이러한 문제가 발생하는 이유와 대화형 선택을 유지하는 방법을 알고 싶습니다.
답변1
xargs -a packages sudo apt-get remove
xargs
인수는 에서 직접 읽혀지므로 packages
stdin은 그대로 유지됩니다.
답변2
보다 일반적인 해결책은
sudo apt-get remove `cat packages`
목록이 다음과 같은 경우 문제가 발생합니다.패키지가 정말 길어요.
작동하지 않는 이유는 apt-get이 (파이프로 인해) 표준 입력에서 확인을 읽으려고 하기 때문입니다 cat
. 대신 sudo
/dev/tty를 직접 열고 비밀번호를 묻는 것이 올바른 것입니다. 할 것. Apt는 이 작업을 수행해야 하지만 분명히 그렇지 않습니다.
답변3
apt-get
여러 패키지가 제거되므로 작업을 확인해야 합니다 . STDIN
파이프에서 읽고 터미널에 연결되지 않았기 때문에 자동으로 가정됩니다 No
.
이 문제를 해결하는 또 다른 방법은 APT::Get::Assume-Yes
에 추가하는 것입니다 apt.conf
.
답변4
해결책.
GNU xargs 및 ksh/zsh/bash 사용:
sudo xargs -r --arg-file <(cat packages) apt-get remove
(물론 명령이 . 이면 . 로 cat
바꿀 수 있습니다 .<(cat packages)
packages
또는:
< packages sudo xargs sh -c 'exec apt-get remove "$@" < /dev/tty' sh
"패키지" 파일의 형식에 따라(xargs는 공백으로 구분된 인수 목록을 예상하고 따옴표(및 "
)를 처리하지만 따옴표를 처리하지 않고 와일드카드 패턴을 확장함) 다음을 수행할 수도 있습니다.'
\
$(...)
sudo apt-get remove $(cat packages)
그러나 많은 운영 체제에는 명령줄 길이에 제한이 있으므로 목록이 크면 작동하지 않을 수 있습니다(그러나 xargs
여러 명령을 실행하면 문제가 해결될 수 있습니다 apt-get
).