私はこれをエイプリルフールのいたずらにしようとします。 Linuxボックスに数秒ごとにシェルにメッセージを表示させたいと思います。
私の考えは、バックグラウンドジョブとして実行される無限ループ(.bashrcで)を開始してこれを行うことです。
たとえば、私が望むものは次のとおりです。
while true ; do echo Evil Message; sleep 10; done
バックグラウンドで実行するには、次のことを試しました。
cmd="while true ; do echo Evil Message; sleep 10;"
$cmd &
しかし、これはエラーのため失敗します。
while: command not found
エラーメッセージが表示されるのはなぜですか?このスクリプトを機能させる方法はありますか?
ベストアンサー1
while
コマンドではなくシェルキーワードです。変数拡張が行われる前にキーワードが認識されるため、拡張後は遅すぎます。
いくつかのオプションがあります。
変数をまったく使用しないでください。
while true ; do echo Evil Message; sleep 10; done &
eval
変数の拡張値に対してシェルを実行するために使用されます。eval "$cmd" &
ループを実行するには、シェルを呼び出します。
bash -c "$cmd" &
関数の使用(通常はコードを保存するために使用されます):
cmd() { while true ; do echo Evil Message; sleep 10; done; } cmd &