Bash 焦油和封头的组合-1未按预期工作

Bash 焦油和封头的组合-1未按预期工作,bash,pipeline,tar,Bash,Pipeline,Tar,我正在编写一个脚本,需要解压缩一个文件,然后切换到使用cdcomment解压缩的第一个文件夹 我所做的是: filename_2=$(tar zxvf ${filename} | head -1) cd $filename_2 并按预期工作,但它不会从tar.gz文件中解压所有文件不确定原因,因为如果我这样做: filename_2=$(tar zxvf ${filename}) 它会解压一切,但我不知道如何访问解压后的第一个文件夹 我不明白|管道如何影响以前的命

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

我所做的是:

    filename_2=$(tar zxvf ${filename} | head -1) 
    cd $filename_2
并按预期工作,但它不会从tar.gz文件中解压所有文件不确定原因,因为如果我这样做:

    filename_2=$(tar zxvf ${filename}) 
它会解压一切,但我不知道如何访问解压后的第一个文件夹

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

我做错了什么


谢谢。

因为
head
完成,它向
tar
发送一个
SIGPIPE
信号,使其停止。您需要缓冲标准输出,直到tar完成运行,例如,使用moreutils的
海绵

filename_2=$(tar zxvf ${filename} | sponge | head -1)
如果您没有海绵,
tail
值较高,通常也可以工作:

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

由于
head
完成,它向
tar
发送一个
SIGPIPE
信号,使其停止。您需要缓冲标准输出,直到tar完成运行,例如,使用moreutils的
海绵

filename_2=$(tar zxvf ${filename} | sponge | head -1)
如果您没有海绵,
tail
值较高,通常也可以工作:

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

这起作用了,非常感谢您详细介绍了为什么会发生这种情况,对bash来说有点陌生。这起作用了,非常感谢您详细介绍了为什么会发生这种情况,对bash来说有点陌生。