【发布时间】:2014-10-13 00:27:54
【问题描述】:
我有两个文件,第一个名为 packages.txt 的包列表:
gcc
emacs
vim
python
...
现在,当我运行命令时
cat packages.txt | tr '\n' ' ' | apt-get install
这基本上将文件转换为以空格分隔的一行包。它没有安装packages.txt. 中的所有软件包(我认为它只安装第一个)有人知道为什么吗?
【问题讨论】:
我有两个文件,第一个名为 packages.txt 的包列表:
gcc
emacs
vim
python
...
现在,当我运行命令时
cat packages.txt | tr '\n' ' ' | apt-get install
这基本上将文件转换为以空格分隔的一行包。它没有安装packages.txt. 中的所有软件包(我认为它只安装第一个)有人知道为什么吗?
【问题讨论】:
尝试使用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
【讨论】:
apt-get,但我的猜测是 apt-get 每个实例只处理一个输入。其次,apt-get 尝试调用的某些应用程序也可能正在读取输入并吃掉文件中的整个输入。
管道操作符将一个应用程序的stdout 发送到下一个应用程序(如stdin。不幸的是,apt-get 不会从stdin 读取。相反,apt-get 在命令行上获取包列表. 我认为你正在尝试做的更像是
apt-get install $(cat packages.txt | tr '\n' ' ')
或
apt-get install `cat packages.txt | tr '\n' ' '`
也就是说评估文件列表,并将其作为参数传递给单个 apt-get 调用。
【讨论】: