我有一个包含以下内容的简单文件:
# 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
。