Você quer algo assim:
echo -e "foo\ntouchit\nbar\nbaz" | while read line; do case $line in
touchit) touch test.txt;;
bar) echo bar found;;
esac; done
Suponha que eu deixo o netcat escutar em alguma porta no PC1 (IP: 10.0.0.1) com:
PC1:~$ nc -l 9999
Eu conecto do PC2 (IP: 10.0.0.2) e envio algumas strings:
PC2:~$ nc 10.0.0.1 9999
hello
touchit
test
what's up
touchit
bye
Como eu tenho que modificar o primeiro comando no PC1 de forma que o comando 'touch test.txt' seja executado no PC1 sempre que eu enviar 'touchit' do PC2?
Seria ótimo fazer isso com uma combinação inteligente de comandos e tubulações padrão. Naturalmente, 'touch test.txt' poderia então ser substituído por um comando arbitrário. Seria extremamente legal se você pudesse lançar programas diferentes com strings de comando diferentes enviadas do PC2.
Você quer algo assim:
echo -e "foo\ntouchit\nbar\nbaz" | while read line; do case $line in
touchit) touch test.txt;;
bar) echo bar found;;
esac; done
Se o programa for iniciado apenas uma vez:
nc -l 9999 |
{ awk '/^touchit$/ {matched=1;exit(0);};
END {if(matched==1) { exit(0); } else exit(1); }'
&& echo ja; }
Infelizmente nc
não termina imediatamente após o touchit
.
Tags netcat