繁体   English   中英

我如何告诉 bash 脚本从头开始?

[英]How would I tell a bash script to start over from the top?

例如,在下面的脚本中, startover启动从顶部开始:

##########################################################################
## CHECK TIME
##########################################################################
time=$(date +%k%M)

if [[ "$time" -ge 1800 ]] && [[ "$time" -le 2200 ]];then
echo "Not a good time to transcode video!" && exit 0
else
echo "Excellent time to transcode video!" && echo "Lets get started!"
fi
##########################################################################
## CHECK TIME
##########################################################################
startover

还要记住exit 0应该能够停止脚本。

您可以使用以下行“递归”:

exec bash "$0" "$@"

由于$0是当前脚本的路径,此行启动脚本而不创建新进程,这意味着您无需担心太多重新启动会溢出您机器上的进程表。

把它放在一个while循环中。 我还建议你添加一个“睡眠”,这样你就不会像机器的 CPU 那样快地运行:

while true; do
    ##########################################################################
    ## CHECK TIME
    ##########################################################################
    time=$(date +%k%M)

    if [[ "$time" -ge 1800 ]] && [[ "$time" -le 2200 ]]; then
        echo "Not a good time to transcode video!" && exit 0
    else
        echo "Excellent time to transcode video!" && echo "Lets get started!"
    fi
    ##########################################################################
    ## CHECK TIME
    ##########################################################################
    for i in {1..5}; do
        echo $i
        sleep 1
    done
done

不要在脚本开始时使用 WHILE LOOP,因为下面的条件将退出脚本并中断循环。

echo "Not a good time to transcode video!" && exit 0

您可以尝试捕获退出信号,以便在脚本退出时重新启动

##########################################################################
## CHECK TIME
############bash##############################################################
trap '<path to script> ' EXIT
time=$(date +%k%M)

if [[ "$time" -ge 1800 ]] && [[ "$time" -le 2200 ]];then
echo "Not a good time to transcode video!" && exit 0
sleep 1;
else
echo "Excellent time to transcode video!" && echo "Lets get started!"
sleep 1;
fi
##########################################################################
## CHECK TIME
##########################################################################
echo 1
echo 2
echo 3
echo 4
echo 5
startover

注意:我添加了 1 秒的睡眠时间,因为这将使您有时间查看消息。 捕获退出信号并重新运行脚本就像一个 while 循环。 我还假设这些代码在脚本中。

如何将整个脚本包含在一个while循环中? 例如,

while :
do
    script
done

您可能想要添加一个条件以跳出循环。

这不是好的做法,而是您所要求的。

将其放在脚本的末尾。 "$( cd "$( dirname "$0" )" && pwd )/$(basename $0)"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM