ポートを開いてコマンドをリッスンし、そのコマンドが入ったらすぐにスクリプトを実行したいと思います。
私が思いついた最高のものは次のとおりです(echoは私のスクリプトを置き換えます)。
nc -lk 9999 | grep -q runcommand && echo "running command"
、その後、テストのために実行します。
echo runcommand | nc localhost 9999
残念ながら、「runcommand」を2番目に送信したときにのみテキストがエコーされるようです。
スクリプトがすぐに実行されるようにgrepをすぐに終了するにはどうすればよいですか?
答え1
このような構成something | grep -q
で考えられる問題の1つは、grep
終了後に左のコマンドが書き込みを試みる前にパイプが閉じているのを見ないことです。しかし、私のnetcat(Debianから来た)では、nc.openbsd
与えられた場合でも終了しないようです。したがって、決してトリガーされません。しかし、macOSでnetcatを使って説明した動作を得ました。-k
grep
&&
1つの可能性は、netcatをループで包むことです。これは私に適しているようです。
while true; do
if nc -l 9999 | grep -q runcommand; then
echo got correct string, exiting...
break
else
echo got a connection, but not the correct string...
fi
done
もちろん、まだnetcatを終了するようにトリガーしていない行を送信する問題がある場合は、その後にダミー行を送信していつでもそれを突くことができます。
printf "runcommand\n.\n" | nc localhost 9999
これが役に立つかどうかはわかりません。他のWebキャット間にはまだ違いがある可能性があります。