微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

linux – 循环点直到进程完成?巴什

我正在尝试创建一个安装后的bash脚本,当我全新安装Ubuntu时我可以使用它.我想要的第一个功能是脚本提示用户是否要更新他们的系统,如果他们选择是,则显示单词“loading”,然后是循环点,直到过程完成并将输出导出到日志文件.我已设法实现所有这些功能,除了带点的循环.

#!/bin/bash

read -p "Update your system? [y/n]" RESP
if [ "$RESP" = "y" ] || [ "$RESP" = "Y" ] || [ "$RESP" = "Yes" ] || [ $RESP = "yes" ]; then
    echo "Loading..." #dot loop to show that process is occurring    
    sudo apt-get update>>log.txt 2>&1 #when complete want the dots to stop looping.
    echo $?>>log.txt 2>&1  
    echo "UPDATE COMPLETE">>log.txt 2>&1
    echo "----------------------------------------------------------------------------------------------------------------------------------------------------">>log.txt 2>&1
    echo "----------------------------------------------------------------------------------------------------------------------------------------------------">>log.txt 2>&1
    echo "Status=$?"    
    echo "Done"
    sleep 2
    clear
else
    echo "OK"
fi

解决方法:

#!/bin/bash

"$@" &

while kill -0 $!; do
    printf '.' > /dev/tty
    sleep 2
done

printf '\n' > /dev/tty

将其另存为名为run_with_dots的脚本.然后你可以这样做:

sudo ./run_with_dots apt-get update >>log.txt 2>&1

您可以传递任何命令,它将运行它并每两秒打印一次点,直到命令完成. “$@”&将脚本的参数视为要运行的命令,使用&在后台做它.它使用kill -0来检查进程是否仍在运行($!是后台进程的PID).由于您想要重定向stdout和stderr,因此这些点将打印到/ dev / tty.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐