직렬 장치의 데이터를 해석할 수 있는 bash 스크립트를 작성하려고 합니다. 나는 원시 방식으로 포트를 구성한 다음 /dev/ttyUSB0에 대해 간단한 cat을 실행하여 데이터를 볼 수 있었습니다. 제 질문은 자유롭게 조작할 수 있도록 장치에서 bash 변수로 전송한 한 줄의 데이터를 가져오는 방법입니다.
Python을 사용하기 전에 bash에서 사용하여 항상 모든 Linux 시스템에서 실행될 스크립트를 갖고 싶습니다.
내가 받은 데이터의 형식은 다음과 같습니다: STX<26 x 4Bit-Nibbles coded as ASCII Payload>ETX
이상적으로는 새 데이터 문자열을 얻을 때마다 새 페이로드(STX 및 ETX 없음)를 Bash 변수에 저장할 수 있습니다.
해결책
@icarus 답변의 도움으로 나는 매력처럼 작동하는 것을 만들었습니다. 먼저 STX 값으로 인터럽트를 생성하도록 직렬 포트를 구성합니다.
stty /dev/ttyUSB0 115200 내부 0x02
그런 다음 원하는 정보를 얻으려면 다음 루프를 사용합니다.
ETX=$'\003'
-d "$ETX" 라인을 동시에 읽습니다. echo $line < /dev/ttyUSB0;
도움을 주셔서 다시 한번 감사드립니다. 이 사이트에 대한 첫 경험이 정말 좋았습니다. 건배
답변1
검증되지 않은!
#!/bin/bash
ETX=$'\003'
STX=$'\002'
# Open /dev/ttyUSB0 open on FD9
exec 9< /dev/ttyUSB0
# do any stty stuff needed on fd9
# e.g.
# stty 9600 < /proc/self/fd/9 > /proc/self/fd/9
# now loop, reading from the device,
while IFS= read -rd "$ERX" -u 9 wibble
do
wibble=${wibble#"$STX"}
printf 'Got %q\n' "$wibble"
# Do something
done
의 경우 bash
데이터에 NUL 바이트가 포함되어 있으면 이 방법이 작동하지 않습니다. zsh
이런 경우에는 이를 사용해야 합니다.