1. ホーム
  2. bash

[解決済み] タイムアウトを伴うシェル関数の実行

2023-04-28 17:06:28

質問

なぜこのようなことができるのでしょうか?

timeout 10s echo "foo bar" # foo bar

しかし、これでは

function echoFooBar {
  echo "foo bar"
}

echoFooBar # foo bar

timeout 10s echoFooBar # timeout: failed to run command `echoFooBar': No such file or directory

で、どうすればうまくいくのでしょうか?

どのように解決するのですか?

timeout はコマンドであるため、bashシェルのサブプロセスで実行されます。したがって、現在のシェルで定義された関数にアクセスすることはできません。

コマンドは timeout が与えられると、timeout のサブプロセス(シェルの孫プロセス)として実行されます。

というのは、混乱するかもしれません。 echo はシェルの組み込みでもあり、独立したコマンドでもあるからです。

あなたができることは、関数を独自のスクリプトファイルに入れて、実行可能なように chmod して、それを timeout .

サブシェルで関数を実行し、元のプロセスで、進行状況を監視し、時間がかかりすぎる場合はサブプロセスを終了させる、フォークという方法もあります。