为什么提供的命令作为参数不在我的脚本中循环运行?

为什么提供的命令作为参数不在我的脚本中循环运行?

我制作了一个简单的脚本,每分钟执行一个命令:

#!/usr/bin/env sh

while true; do
    exec "$@"
    sleep 60
done

我们的想法是让它成为一个Docker 入口点这将允许我运行 Laravel 调度程序。但在构建图像之前,我想对其进行测试:

$ ./entrypoint/entrypoint_cron.sh echo "Hello"
Hello

但该命令只执行一次。为什么?如何使参数中提供的命令连续循环运行,直到我用Ctrl+终止它C

答案1

exec命令将当前进程替换为新进程。成功执行意味着没有任何东西可以继续执行脚本。

POSIX( 的文档sh,另见man sh)写道像这样,

如果exec用command指定,则用command替换shell,而不创建新进程。如果指定了参数,则它们应是命令的参数。

也许你的意思是这个?

#!/bin/sh
while true
do
    "$@"
    sleep 60
done

相关内容