再shell脚本中将zip压缩文件解压,文件后缀名为.gz,解压命令为gunzip test.gz,打印shell日志,发现gunzip test.gz命令确实被打印,也就是说业务逻辑正常,打印$?,结果为0,尝试在gunzip test.gz前后添加sleep 5s命令,压缩文件仍然没有被解压,但是这个问题是偶发的,不做任何修改,删除test.gz并重新下载后,再执行shell却正常执行。
mv ${locDir}${locFileName} ${locDir}${locFileName}.gz
echo $(ls ${locDir})
echo "gunzip ${locDir}${locFileName}.gz"
sleep 5s
gunzip ${locDir}${locFileName}.gz
echo $?
为什么要多一步命名的操作呢? 你是用什么压缩的,你是不是已经解开了,露出的只是tar归档格式的文件。
[root@maple-c8-n1 ~]# gzip halt-auto-boot.iso -c > testgz
[root@maple-c8-n1 ~]# file testgz
testgz: gzip compressed data, was "halt-auto-boot.iso", last modified: Thu Jun 10 12:12:21 2021, from Unix, original size 4740200
[root@maple-c8-n1 ~]# bash test.sh
halt-auto-boot.iso testgz.gz test.sh
gunzip /root/testgz.gz
0
[root@maple-c8-n1 ~]# file testgz
testgz: ISO 9660 CD-ROM filesystem data 'CentOS 8.3 x86_64 boot' (bootable)
[root@maple-c8-n1 ~]# cat test.sh
#!/bin/bash
locDir=/root/
locFileName=testgz
mv ${locDir}${locFileName} ${locDir}${locFileName}.gz
echo $(ls ${locDir})
echo "gunzip ${locDir}${locFileName}.gz"
gunzip ${locDir}${locFileName}.gz
echo $?
我的没问题呢
我觉得你的命令没问题,可能是文件过大或者服务器资源,比如CPU占用过高等,造成你执行解压命令之后要等待:
你可以看下这个解压加速:
Linux 加快解压速度,使用 pigz 并行加速 Linux 压缩与解压: https://blog.csdn.net/weixin_39890543/article/details/116959969
每次是吧我都会把echo的内容放在linux终端中执行,但是只要是写进shell脚本里就有可能执行失败
echo "gunzip ${locDir}${locFileName}.gz"