程序在gzip仍在运行时启动下一行代码

时间:2015-03-19 04:17:57

标签: shell gzip

在shell脚本中我首先生成一个文件,然后使用gzip压缩它,然后使用scp将其传输到远程机器。 gzip之前的问题成功完成了指向下一行代码的指针,因此我正在远程机器中部分传输gz文件。

我的意思是gzip命令是启动zip但是在zip完成之前(因为文件大小很大,所以完成zip过程需要一些时间),下一行代码正在执行;这是scp,所以我在远程机器上进行部分文件传输。

我的问题是我可以指定gzip的选项是什么,并且指针在zip进程成功完成之前不应该移动到下一行代码。

GZIP在我的代码中使用如下:

gzip -c <filename> > <zip_filename> 2>&1 | tee -a <log_filename>

请建议。

1 个答案:

答案 0 :(得分:1)

首先,如果我这样做

gzip -cr /home/username > homefolder.gz

bash在执行下一个命令之前一直等到命令结束(即使在脚本中使用)。

但是,如果我弄错了或者您在后台运行了命令,可以使用以下代码等待gzip完成:

#!/bin/bash

gzip -cr "$1" > "$1.gz" &
while true; do
    if fuser -s "$1" "$1.gz"; then
        echo "gzip still compressing '$1'"
    else
        echo "gzip finished compressing '$1' (archive is '$1.gz')"
        break
    fi
done

exit 0

或者,如果你只是想等一下,什么都不做,那就更简单了:

gzip -cr "$1" > "$1.gz"
while fuser -s "$1" "$1.gz"; do :; done
# copy your file wherever you want