Fluke DewK 1620a 온습도계에서 온도 및 습도 데이터를 추출하고 온도/습도 판독값을 로그에 기록하려고 합니다. 간단한 "nc 1.2.3.4 10001"을 사용하여 netcat을 통해 장치에 연결하고 몇 가지 기본 명령을 실행하고 출력을 받을 수 있습니다. 이제 명령을 보내고 출력을 파일에 기록하는 스크립트에 넣을 수 있는 명령줄을 작성하고 싶습니다.
명령줄에서 다음 명령을 실행하면
$ echo "read?" | nc -v -i 1 1.2.3.4 10001
나는 받았다:
Connection to 1.2.3.4 10001 port [tcp/scp-config] succeeded!
76.55,44.4,72.06,48.0
-i 간격이 지나면 연결이 닫히고 프롬프트가 온도 및 습도 데이터를 덮어씁니다.
그런 다음 다음을 시도했습니다.
echo "read?" | nc -v -i 1 1.2.3.4 10001 >> test.out 2>&1
명령이 실행되고 "test.out" 파일에는 각 실행에 대한 다음 내용만 포함됩니다.
Connection to 1.2.3.4 10001 port [tcp/scp-config] succeeded!
온도 및 습도 판독값은 파일에 포함되지 않습니다. 자세한 내용을 추가하는 것은 도움이 되지 않는 것 같습니다.
나는 아마도 분명한 것을 놓치고 있다는 것을 알고 있지만 그것을 볼 수 없습니다. 어떤 도움이라도 대단히 감사하겠습니다.
답변1
문제가 전혀 보이지 않아 Fluke가 실제로 반응하는지 궁금합니다.
이 두 netcat 스크립트는 구문에 문제가 없음을 보여줍니다.
섬기는 사람:
# server
while true; do date; sleep 1; done | nc -l 10001
고객:
# client
echo "hello?" | nc -v -i1 localhost 10001 >> test.out 2>&1
확인해 보세요
[sri@tidevel netlink]$ cat test.out
Ncat: Version 6.45 ( http://nmap.org/ncat )
Ncat: Connected to 127.0.0.1:10001.
Wed Nov 5 13:54:06 EST 2014
Wed Nov 5 13:54:07 EST 2014
Ncat: Idle timeout expired (1000 ms).
이제 모든 작업이 완료되었으며 실제로 Fluke로부터 응답을 받고 있는지 확인했습니다. Fluke 데이터를 사용하는 다른 netcat이나 다른 응용 프로그램이 있을 수 있습니까?
아마도 명령은 \r \n 또는 이와 유사한 것으로 종료되어야 할 수도 있습니다. 써모트론은 이랬던 기억이 나는 것 같은데 꽤 오래전 일이네요. printf를 사용하여 이 작업을 수행할 수 있습니다.
printf "hello?\r\n" | nc -v -i1 localhost 10001 >> test.out 2>&1
답변2
이것을 그 자체로 "답변"이라고 부를 수 있을지는 모르겠지만, 제가 하고 싶은 일을 완전히 다른 방식으로 근사화할 수 있었습니다. nc를 사용하는 대신 /dev/tcp의 파일 설명자를 사용하여 더 많은 작업을 진행했습니다.
exec 3<>/dev/tcp/${host}/${port}
echo -e "read?" >&3
cat <&3 | tee -a ${log}
exec 3<&-
exec 3>&-
이 접근 방식을 사용하면 여전히 몇 가지 문제를 해결해야 하지만 필요한 데이터를 추출하여 로그 파일에 넣을 수 있었습니다. 이 방법으로 문제를 스스로 알아낼 수 없다면 나중에 다른 기사를 시도해 보겠습니다.