Não é possível encaminhar um soquete TCP em um script bash

1

Eu tenho quatro soquetes TCP conectados a um dispositivo.

Estes são criados com

exec 3<>/dev/tcp/IP/PORT
exec 4<>/dev/tcp/IP/PORT
exec 5<>/dev/tcp/IP/PORT
exec 6<>/dev/tcp/IP/PORT

Em uma subcamada, eu li os descritores de arquivos

cat <&4 | while read LINE; do
    echo -n "FD4 $LINE" | xxd -ps | sed 's/../&\ /g' > somefile.txt
done &

para encaminhá-lo para um arquivo para uso posterior.

Mas com algum tipo de mensagem, tenho um problema.

Com um simples

cat <&6 | xxd -ps

Eu vejo o seguinte (alguns parâmetros).

006ec94430020000c090006800c903470000000000040000209f00000000
000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000

Mas não posso encaminhar isso para um arquivo ou variável para trabalhar com ele.

Eu já tentei de diferentes maneiras, mas não consigo encontrar uma solução.

Espero que alguém saiba como lidar com uma mensagem como essa.

    
por Marcus 09.09.2017 / 17:47

1 resposta

0

Existem vários problemas com o seu código:

  • em cada linha lida, você recria somefile.txt , apagando, portanto, o que foi colocado na linha anterior. Provavelmente, você deve usar >> somefile.txt ou mover > somefile.txt após a palavra-chave done .
  • parece que você está recebendo dados binários (de acordo com xxd dump), mas seu processo é como se fossem dados textuais separados por novas linhas. Com dados binários, read e echo não funcionam corretamente.

Por que não simplesmente passar o conteúdo de um descritor de arquivo para xxd e salvar o resultado em um arquivo? Ou seja apenas isso:

xxd -ps <&4 | sed 's/../&\ /g' > somefile.txt &
    
por 09.09.2017 / 18:52