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)
我正在编写一个脚本,该脚本需要解压缩一个文件,然后切换到使用 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)