管道与Apt包管理器

时间:2014-08-19 19:17:23

标签: linux bash pipe apt-get

我有两个文件,第一个名为packages.txt,它是包列表:

gcc
emacs
vim
python
...

现在,当我运行命令

cat packages.txt | tr '\n' ' ' | apt-get install

这基本上将文件转换为由空格分隔的一行包。它没有安装packages.txt.中的所有软件包(我认为它只安装第一个)有谁知道为什么?

2 个答案:

答案 0 :(得分:3)

尝试使用xargs

xargs -d '\n' -- apt-get install < packages.txt

或者

xargs -d '\n' -n 1 -- apt-get install < packages.txt

确保packages.txt不是DOS格式:

sed -i 's|\r||' packages.txt

答案 1 :(得分:1)

管道运营商将一个应用程序的stdout发送到下一个应用程序(stdin。不幸的是,apt-get不会从stdin读取。而是{{1}在命令行中获取一个包列表。我认为你试图做的更多是

apt-get

apt-get install $(cat packages.txt | tr '\n' ' ')

这就是评估文件列表,并将其作为参数传递给单个apt-get install `cat packages.txt | tr '\n' ' '` 调用。