我正在编写一个脚本,需要解压缩文件,然后切换到使用cd注释解压缩的第一个文件夹.
我所做的是以下内容:
filename_2=$(tar zxvf ${filename} | head -1)
cd $filename_2
Run Code Online (Sandbox Code Playgroud)
并按预期工作,但它不解压缩tar.gz文件中的所有文件,不知道为什么,因为如果我这样做:
filename_2=$(tar zxvf ${filename})
Run Code Online (Sandbox Code Playgroud)
它将解压缩一切正常,但后来我不知道如何访问解压缩产生的第一个文件夹.
我不明白|管道如何影响以前的命令.
我究竟做错了什么?
谢谢.
因为head完成了,它会发出一个SIGPIPE信号tar,导致它停止.你需要缓冲stdout直到tar运行完毕,例如使用spongemoreutils:
filename_2=$(tar zxvf ${filename} | sponge | head -1)
Run Code Online (Sandbox Code Playgroud)
如果你没有海绵,tail高价值也一般有效:
filename_2=$(tar zxvf ${filename} | tail -n 10000000000 | head -1)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
27 次 |
| 最近记录: |