팩맨 입력에 주석을 추가하지 않고 파일을 전달하기 위해 표준 출력을 올바르게 리디렉션하는 방법

팩맨 입력에 주석을 추가하지 않고 파일을 전달하기 위해 표준 출력을 올바르게 리디렉션하는 방법

다음 내용이 포함된 간단한 파일이 있습니다.

# 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)을 사용하여 주석 없이 파일에서 원하는 작업을 수행한다고 가정합니다 .printfpacman

$ 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.

관련 정보