답변:
이 라인을 따라 뭔가가 트릭을해야합니다.
apt-get install $(grep -vE "^\s*#" filename | tr "\n" " ")
$ (something) 구성은 something 명령을 실행하여 출력을 명령 행에 삽입합니다.
grep 명령은 #으로 시작하는 행을 제외하고 선택적으로 앞에 공백을 허용합니다. 그런 다음 tr 명령은 개행을 공백으로 바꿉니다.
tr멀티 바이트 줄 끝 시퀀스 (생각 \r\n)로 실패합니다. 왜 사용하지 xargs않습니까?
다음 명령은 sudo apt-get install패키지 목록이 비어있을 때 실행되지 않기 때문에 대안에 비해 약간 개선되었습니다 .
xargs -a <(awk '! /^ *(#|$)/' "$packagelist") -r -- sudo apt-get install
이 -a옵션은 표준 입력 대신 파일에서 직접 항목을 읽습니다. xargsstdin은 사용하기 위해 stdin을 변경하지 않아야하기 때문에 파일을 파이프하고 싶지 않습니다 apt-get.
xargs이 작업을 수행하는 올바른 방법입니다. 간계 <()는 깔끔합니다.
xargs확실히 ARG_MAX 도달하지 않았기 때문에 더 나은 솔루션 입니다.
xargs -a $(awk '/^\s*[^#]/' "$packagelist") -r -- sudo apt-get -y install"아니, <("하지만, " $("및 옵션 -yapt-get을위한 좋은 아이디어가 될 것입니다.
awk파일 디스크립터로 경로 재 지정합니다 xargs -a. 그래서 당신은 분명히 원 <(하고 아닙니다 $(. 그냥 시도하면 내가 무슨 뜻인지 알 수 있습니다. 명령을 무인으로 실행하고 이미 무엇을 설치해야하는지 알고 있다면 -y플래그를 지정하는 것이 좋습니다.