다음 내용이 포함된 간단한 파일이 있습니다.
# programming
python
python-pip
perl
# web
firefox
firefox-i18n-es-es
이 예의 파일 이름은 입니다 file
. 저는 일반적으로 이러한 include 를 사용합니다 pacman
. 이 방법으로 명령에 전달합니다.
pacman -Sy --noconfirm $(<file)
나는 일반적으로 이 파일에 주석을 사용하지 않지만, 주석의 필요성을 느끼기 시작했습니다. 주석( #
)이 없으면 문제가 없지만 주석을 사용하면 설치할 패키지로 추출됩니다.
$ pacman -S $(<file)
[sudo] password for user:
error: no se ha encontrado el paquete: #
error: no se ha encontrado el paquete: programming
advertencia: python-3.9.1-2 está actualizado -- reinstalándolo
advertencia: python-pip-20.3.1-1 está actualizado -- reinstalándolo
advertencia: perl-5.32.1-1 está actualizado -- reinstalándolo
error: no se ha encontrado el paquete: #
error: no se ha encontrado el paquete: web
advertencia: firefox-85.0.2-1 está actualizado -- reinstalándolo
advertencia: firefox-i18n-es-es-85.0.2-1 está actualizado -- reinstalándolo
나는 stdout
주석 처리된 줄 없이 그것을 하려고 합니다:
$ cat file | grep -v '^#'
python
python-pip
perl
firefox
firefox-i18n-es-es
하지만 모든 것을 결합하는 방법을 모르겠습니다.
$ pacman -S $(< $(cat file | grep -v '^#'))
-bash: $(cat file | grep -v '^#'): redireccionamiento ambiguo (ambiguous redirection)
error: no se especificaron objetivos (use -h para ayuda)
어떻게 결합할 수 있나요?
답변1
pacman -S $(grep -v '^#' file)
예를 들어 대신 다음 pacman -S $(<file)
을 사용하여 주석 없이 파일에서 원하는 작업을 수행한다고 가정합니다 .printf
pacman
$ printf '<%s>\n' $(<file)
<#>
<programming>
<python>
<python-pip>
<perl>
<#>
<web>
<firefox>
<firefox-i18n-es-es>
$ printf '<%s>\n' $(grep -v '^#' file)
<python>
<python-pip>
<perl>
<firefox>
<firefox-i18n-es-es>
답변2
xargs
당신을 도울 수 있습니다:
grep -v "^#" file.txt | xargs -I{} apt search --names-only {}
나는 를 사용 apt
하지만 로 바꿀 수 있습니다 pacman
.