パイプで **less**(`+F`) を使用して _follow_ モードを終了するには?

パイプで **less**(`+F`) を使用して _follow_ モードを終了するには?

Bashに次のダミーコマンドがあるとします。

### dummy long_operation_cmd function, for easy reproduction:
function long_operation_cmd() {
  echo "operation 1"
  sleep 5
  echo "operation 2"
}

現在、次のようにbashスクリプトを実行しています。

{
    long_operation_cmd
    echo '===ALL DONE==='
} > /tmp/logfile.tmp &
tail -f /tmp/logfile.tmp | sed '/^===ALL DONE===$/ q' \
&& rm /tmp/logfile.tmp

これにより、バックグラウンドで長いジョブを安全に実行し、出力を追跡し、Ctrl + Cが実行を中断しないようにすることができます。

最も重要なのは、作業が完了したらsedフォローモードから出ることができることです。

tail -f私はに変更したかったのですがless +F、これが私が思いついたものです:

{
    long_operation_cmd
    echo '===ALL DONE==='
} > /tmp/logfile.tmp &
less +F -- /tmp/logfile.tmp \
&& rm /tmp/logfile.tmp

===ALL DONE===しかし、フォローモードに達したとき(またはタスクが完了したとき)は、long_operation_cmd自動的にフォローモードから抜け出す方法が見つかりません。

このトラブルシューティングに関する提案はありますか?

ベストアンサー1

「ALL DONE」の場合、プロセスに SIGINT 信号を送信できます。

kill -int PID

しかし、これを行うにはPIDを知る必要があります(less +Fバックグラウンドでも実行中ですか?)。

おすすめ記事