bashプログラムは、標準入力でキーワードを表示するときに特定のタスクを実行します。

bashプログラムは、標準入力でキーワードを表示するときに特定のタスクを実行します。

外部コンピュータに接続し、数分間標準出力で多くのコンテンツを印刷する実行可能ファイルがあるとします。この出力の終わりには、「STOP」やEOF文字などのキーワードがあります。このキーワード/ EOFを印刷した後、実行可能ファイルは引き続き実行されますが、出力は送信されなくなります。それ自体は終了しません。

次に、この実行可能ファイルの出力を次のようにするbashスクリプトにパイプしたいと思います。

  1. 入力した内容を読み、それらをすべて標準出力に書き込みます。
  2. 「STOP」という単語(またはEOF文字も可能)が表示されたら、実行可能ファイルを終了します。

pkillを使用して実行可能ファイルを終了できます。おそらく、teeとgrepの組み合わせを使用できます。しかし、grepで一致を取得したらどうすればいいのかわかりません。

ベストアンサー1

スクリプト自体にはリダイレクトトリックが必要です。

#!/bin/bash

exec 1> >(tee >(awk '/STOP/{system("kill '"$$"'")}'))

while read line; do
  echo $line
  sleep 1
done

それから:

bash-4.1$ (echo can; echo t; echo STOP; echo believing) | bash datscript

別のオプションはexpect次のとおりです。

#!/usr/bin/env expect
spawn thatconnectingexecutablething
set timeout 7
expect {
  -ex "STOP" { exit 1 }
  eof { exit 1 }
  timeout { exit 1 }
  ...
}

おすすめ記事