引数として与えられたコマンドがスクリプト内のループで実行されないのはなぜですか?

引数として与えられたコマンドがスクリプト内のループで実行されないのはなぜですか?

毎分コマンドを実行する簡単なスクリプトを作成しました。

#!/usr/bin/env sh

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

アイデアはそれを作ることですドッカーエントリーポイントこれにより、Laravelスケジューラを実行できます。しかし、画像を構築する前にテストしたいと思います。

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

ただし、コマンドは一度だけ実行されます。なぜ?引数に指定されたコマンドがCtrl+で終了するまで連続ループで実行するにはどうすればよいですかC

ベストアンサー1

このexecコマンドは現在のプロセスを新しいプロセスに置き換えます。成功した実行とは、スクリプトの実行を続行しないことを意味します。

POSIX(についてのドキュメントsh、参照man sh)は以下を作成します。このように

commandとして指定すると、exec新しいプロセスを作成せずにシェルがcommandに置き換えられます。引数が指定されている場合は、コマンドの引数でなければなりません。

たぶんあなたはこれを意味しますか?

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

おすすめ記事