loop処理をバックグラウンドで実行する方法

事象

whileやfor等のloop処理をバックグラウンドで実行しようとしても、エラーになってしまい実行できません。

$ nohup while [[ i -lt 10 ]]; do echo $i; ((i++)); done &
-bash: 予期しないトークン `do' 周辺に構文エラーがあります
$

対策

loop処理のコマンドをbashに文字列として渡すとエラーにならずに実行することが可能です。

$ i=1
$ nohup bash -c 'while [[ i -lt 10 ]]; do echo $i; ((i++)); done' &
[1] 1335
$ nohup: 入力を無視し、出力を `nohup.out' に追記します

[1]+  終了                  nohup bash -c 'while [[ i -lt 10 ]]; do echo $i; ((i++)); done'
$

nohup.outを確認すると処理が正常に実行されていることが確認できます。

$ cat nohup.out

1
2
3
4
…

コメント