Se você está perguntando " Como posso obter o número da porta a partir dos dados de entrada? ", com os seguintes dados:
{"arguments":{},"result":"success"} {"port":37482}
Depois, aconselho-lhe que consulte jq
:
$ echo '{"arguments":{},"result":"success"} {"port":37482}' | jq -s '.[1].port'
37482
jq -s
irá " slurp " a entrada em uma matriz, isso é necessário já que você está fornecendo dois objetos distintos:
$ echo '{"arguments":{},"result":"success"} {"port":37482}' | jq -s '.'
[
{
"arguments": {},
"result": "success"
},
{
"port": 37482
}
]
Você deve, então, endereçar o segundo elemento da matriz ( .[1]
) e, subsequentemente, o elemento ' port
' ( .[1].port
).
Como uma extensão para resolver algumas das suas dúvidas:
Você sabe o que é o JSON, pode pegá-lo aqui e pode facilmente imprimi-lo, redirecioná-lo para um arquivo, etc ...
client_id=$(cat "$client_id_file")
curl "http://209.222.18.222:2000/?client_id=$client_id" > EXAMPLE.json
Eu identifiquei um método para extrair o número da porta acima, mas se você não puder / não quiser usar jq
, então python
funcionaria bem , mas infelizmente sua entrada parece não ser bem JSON, então precisamos trabalhar um pouco mais:
Observação : precisamos passar o JSON como primeiro argumento, já que o script está entrando via stdin, então a abordagem echo xxx | jq
acima não funcionará bem.
$ python - <<"EOF" '{"arguments":{},"result":"success"} {"port":37482}'
def read_obj(filename):
from sys import argv
from json import JSONDecoder
decoder = JSONDecoder()
file_content = argv[1].lstrip()
while file_content:
obj, eod = decoder.raw_decode(file_content)
file_content = file_content[eod:].lstrip()
yield obj
x = read_obj('x')
obj = next(x) # discard the first object
obj = next(x) # use the second object
print(obj['port'])
EOF
Não posso ajudar você a interagir com a transmissão.