我正在尝试创建一个安装后的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
答案 0 :(得分:9)
#!/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。