tar 和 head -1 的组合未按预期工作

Combination of tar and head -1 not working as expected

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

我的做法是:

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

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

    filename_2=$(tar zxvf ${filename}) 

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

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

我做错了什么?

谢谢。

因为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)