我正在处理一个脚本,该脚本需要解压缩文件,然后切换到使用cd
注释解压缩的第一个文件夹。
我要做的是以下事情:
filename_2=$(tar zxvf ${filename} | head -1)
cd $filename_2
并且可以按预期工作,但是它不能从tar.gz文件中解压缩所有文件,所以不确定为什么,因为如果这样做:
filename_2=$(tar zxvf ${filename})
它将正常解压缩所有文件,但是我不确定如何解压缩后访问第一个文件夹。
我不明白|
管道如何影响上一个命令。
我在做什么错了?
谢谢。
答案 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)