gpt4 book ai didi

linux - 循环点直到过程完成?狂欢

转载 作者:IT王子 更新时间:2023-10-29 00:57:12 27 4
gpt4 key购买 nike

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

#!/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)。这些点被打印到 /dev/tty 因为你想重定向 stdout 和 stderr。

关于linux - 循环点直到过程完成?狂欢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25903943/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com