![netcatを使ってプログラムを起動しますか? [コピー]](https://linux33.com/image/59249/netcat%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%A0%E3%82%92%E8%B5%B7%E5%8B%95%E3%81%97%E3%81%BE%E3%81%99%E3%81%8B%EF%BC%9F%20%5B%E3%82%B3%E3%83%94%E3%83%BC%5D.png)
netcatにPC1(IP:10.0.0.1)の特定のポートをリッスンさせるとしましょう。
PC1:~$ nc -l 9999
PC2(IP:10.0.0.2)で接続し、一部の文字列を送信します。
PC2:~$ nc 10.0.0.1 9999
hello
touchit
test
what's up
touchit
bye
PC2から「touchit」を送信するたびに、「touch test.txt」コマンドがPC1で実行されるようにPC1の最初のコマンドをどのように変更しますか?
標準コマンドとパイプを賢く組み合わせてこれを実行することをお勧めします。もちろん、「touch test.txt」はどのコマンドでも置き換えることができます。 PC2から送られた別のコマンド文字列を使って他のプログラムを起動することもできれば良いでしょう。
答え1
あなたは次のようなものが欲しい:
echo -e "foo\ntouchit\nbar\nbaz" | while read line; do case $line in
touchit) touch test.txt;;
bar) echo bar found;;
esac; done
答え2
プログラムが一度だけ起動された場合:
nc -l 9999 |
{ awk '/^touchit$/ {matched=1;exit(0);};
END {if(matched==1) { exit(0); } else exit(1); }'
&& echo ja; }
残念ながら、nc
それはすぐに行われませんでしたtouchit
。