KSH:处理命令时显示等待消息

时间:2020-06-04 07:22:36

标签: echo ksh

我正在尝试显示一条消息(带有简单回显),例如“正在处理”,该消息将显示为“正在处理”,“正在处理..”,“正在处理...”,然后以另一种方式返回,然后...直到命令执行完毕。 我正在尝试执行的命令是带有'quiet'参数的分支上的简单git克隆,如下所示:

git clone --quiet -b dev src_path dest_path >/dev/null

这个想法是,无论“处理”之后的点数(1、2或3)如何,在处理结束时它将停止显示。 不知道是否有本机的方法可以做到这一点,或者这很难做到,但是我在KSH脚本中是新手,所以不会理解太复杂的内容(再加上我不是英语流利者)< / p>

感谢您的回答!


编辑:终于找到了一种方法,可能比我期望的要长一些,但是由于它似乎并不是帮助实现此目的的本机方法,所以这是正确的。这就是我的工作(感谢markp-fuso的关键字帮助)。

    git clone --quiet -b dev src_path dest_path >/dev/null &
    PROC_ID=$!
    NB=0
    WAY=1

    while kill -0 "$PROC_ID" >/dev/null; do
        if [ $WAY = 1 ]; then
            if [ $NB = 2 ];then
                WAY=0
            fi
            NB=$((NB+1))
        else
            if [ $NB = 2 ];then
                WAY=1
            fi
            NB=$((NB-1))
        fi
        echo -ne "Processing"
        i=1
        while [ i -lt $((NB+1)) ]; do
            echo -ne "."
            i=$((i+1))
        done
        echo -ne " \r"
        sleep 0.5
    done
    clear
    echo -ne "Process complete.\n"

请注意,我必须在 while 循环的末尾添加 clear 命令,因为一旦 git clone 完成,该循环返回警告,指出该进程不存在(不再)。因此,我会在警告显示后立即清除,以使其对用户不可见。如果您找到一种捕捉它的方法,那就不客气了!即使使用 / dev / null 语句也能显示它,真的感到很惊讶。

1 个答案:

答案 0 :(得分:0)

您可以调整此策略:

print -n "Processing"
while true; do
  print -n "."
  sleep 5
done