假设我让 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
我如何修改 PC1 上的第一个命令,以便每当我从 PC2 发送“touchit”时,命令“touch test.txt”都会在 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
。