如何正确重定向标准输出以传递文件而不向 pacman 输入添加注释

如何正确重定向标准输出以传递文件而不向 pacman 输入添加注释

我有一个包含以下内容的简单文件:

# programming 
python
python-pip
perl
# web
firefox
firefox-i18n-es-es

此示例的文件名为file.我通常使用这些包含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

相关内容