【问题标题】:Pipes with Apt Package Manager带有 Apt 包管理器的管道
【发布时间】:2014-10-13 00:27:54
【问题描述】:

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

gcc
emacs
vim
python
...

现在,当我运行命令时

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

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

【问题讨论】:

    标签: linux bash pipe apt-get


    【解决方案1】:

    尝试使用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
    

    【讨论】:

    • 非常感谢,但是为什么我的方法不起作用?
    • @Husain 我不确定,因为我不使用apt-get,但我的猜测是 apt-get 每个实例只处理一个输入。其次,apt-get 尝试调用的某些应用程序也可能正在读取输入并吃掉文件中的整个输入。
    • 如果你想让它接受跳过安装«accept »,使用apt -y参数
    【解决方案2】:

    管道操作符将一个应用程序的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 调用。

    【讨论】:

      猜你喜欢
      • 2014-12-24
      • 2019-09-02
      • 2021-11-10
      • 1970-01-01
      • 1970-01-01
      • 2021-09-21
      • 1970-01-01
      • 2019-08-28
      • 2019-07-09
      相关资源
      最近更新 更多