焦油和头部-1的组合无法按预期工作

时间:2018-12-07 07:36:00

标签: bash pipeline tar

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

我要做的是以下事情:

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

并且可以按预期工作,但是它不能从tar.gz文件中解压缩所有文件,所以不确定为什么,因为如果这样做:

    filename_2=$(tar zxvf ${filename}) 

它将正常解压缩所有文件,但是我不确定如何解压缩后访问第一个文件夹。

我不明白|管道如何影响上一个命令。

我在做什么错了?

谢谢。

1 个答案:

答案 0 :(得分:5)

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

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

如果您没有海绵,那么tail通常也可以使用:

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