forループをx回だけ実行する方法

forループをx回だけ実行する方法

常にループを実行し続けるのではなく、複数のプロセスをX回終了できますか?

forループを10回未満で実行したいと思います。

for pid in $(ps -ef | grep "helpdax.app" | awk '{print $2}'); do kill -9 $pid; done

答え1

最大10個の引数リストを含むプロセスを終了するには(潜在的に劇的な効果をすべて含むSIGKILL信号(-9)を使用)、helpdax.app次のようにします。

pgrep -f 'helpdax\.app' | head -n 10 | xargs kill -s KILL

または以下を使用してps

ps -Ao pid= -o args= |
  awk -v n=10 '/helpdax\.app/ {print $1; if (!--n) exit}' |
  xargs kill -s KILL

(一部の実装ではリストがps切り捨てられる可能性がありますが、通常はそうでない可能性は低くなります。)argsps -o argsps -f

あなたの文字通りの質問に答える(または少なくとも私が理解したように)、Bourneなどのシェルで最初にループを終了するには、break特別な組み込み関数を使用できます。

したがって、ループで10回パスして終了するには、forループするすべての要素がまだ処理されていませんが、POSIXly:

n=10
for i in ...elements...; do
  ...body of the loop...

  [ "$((n = n - 1))" -gt 0 ] || break
done

または、Kornに似たシェル(bashこの場合はBourne、POSIX、Kornに似ています)を使用してください。

n=10
for i in ...; do
  ...
  ((--n)) || break
done

関連情報