【问题标题】:Combination of tar and head -1 not working as expectedtar 和 head -1 的组合没有按预期工作
【发布时间】:2018-12-07 17:16:20
【问题描述】:

我正在编写一个脚本,该脚本需要解压缩文件,然后切换到使用cd 注释解压缩的第一个文件夹。

我要做的是:

    filename_2=$(tar zxvf ${filename} | head -1) 
    cd $filename_2

并且按预期工作,但它不会解压缩 tar.gz 文件中的所有文件,不知道为什么,因为如果我这样做:

    filename_2=$(tar zxvf ${filename}) 

它会很好地解压一切,但是我不确定如何访问解压后的第一个文件夹。

我不明白| 管道如何影响先前的命令。

我做错了什么?

谢谢。

【问题讨论】:

    标签: bash pipeline tar


    【解决方案1】:

    因为head 完成,它向tar 发送SIGPIPE 信号,导致它停止。您需要缓冲标准输出,直到 tar 完成运行,例如使用来自 moreutils 的sponge

    filename_2=$(tar zxvf ${filename} | sponge | head -1)
    

    如果没有海绵,高值的tail一般也可以:

    filename_2=$(tar zxvf ${filename} | tail -n 10000000000 | head -1)
    

    【讨论】:

    • 这很有效,非常感谢您详细说明为什么会发生这种情况,这对 bash 来说有点新。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-30
    • 1970-01-01
    • 2018-02-09
    • 1970-01-01
    相关资源
    最近更新 更多