ttyS0에서 데이터를 수집하여 변수에 넣을 수 있는 bash 스크립트를 작성하려고 합니다.
직렬 회선의 장치와 통신해야 하며 모듈은 AT 명령을 수신할 수 있습니다. AT 명령을 수신하려면 echo > ttyS0을 사용하여 보내고 관련 응답을 변수에 캡처할 수 있습니다. 수신된 답변을 변수(예: cat /dev/ttyS0 & )에 저장하지 않고도 이 작업을 수행할 수 있지만, 이 데이터를 변수(예: VAR=$(cat /dev/ttyS0 &) )에 넣으려고 하면 작동하지 않습니다(모듈 응답 후 VAR에서 아무것도 찾을 수 없습니다).
gnome 터미널을 통해 다음을 "수동으로" 수행할 수 있습니다(저는 Ubuntu 배포판을 사용하고 있습니다).
(A)라는 GNOME 터미널에서 (루트로) 실행합니다.
# VAR=$(cat /dev/ttyS0)
이 명령은 실행 중이거나 입력을 기다리고
#
있을 수 있으므로 루트 프롬프트로 돌아가지 않습니다 .cat /dev/ttyS0
내가 전화한 다른 GNOME 터미널에서 (B), 나는 다음을 실행했습니다.
# echo -en "hello in VAR\r" > /dev/ttyS0
끈 은 고양이가 넣어야
hello in VAR
해요/dev/ttyS0
VAR
그런 다음 (B)에서:
# killall cat
그놈 터미널(A)에서 프롬프트(
#
)가 반환되는 것을 볼 수 있습니다.마지막으로 그놈 터미널(A)에서:
# echo "$VAR"
hello in VAR
문자열을 받았습니다 .
나는 bash 스크립트를 통해 다음과 같이 이를 달성하려고 합니다.
#!/bin/bash
killall cat
BASHTESTS_DIR=/root/Desktop/Tips_tricks_tutorials/bash_scripting
cd $BASHTESTS_DIR
echo "before VARcat_dev_ttyS0"
VAR=$(cat /dev/ttyS0)
echo "after VARcat_dev_ttyS0"
echo -en "hello in VAR\r" > /dev/ttyS0
sleep 2
killall cat
echo "content of VAR: $VAR"
exit 0
그러나 스크립트는 echo "before VARcat_dev_ttyS0"
내가 원하는 것을 어떻게 구현하거나 두 개의 그놈 터미널로 무엇을 할 수 있습니까? 이후에 중지됩니다.
답변1
ttyS0
두 프로세스를 연결하는 방법 으로 사용하려는 것 같습니다 . 이는 ttyS0
직렬 회선 인터페이스(Windows의 경우)이기 때문에 안정적으로 작동하지 않습니다 COM1:
.
반면에 귀하의 질문에 정보가 누락되었을 수도 있습니다. 직렬 포트에 장치가 있는 경우 이를 명확히 하십시오.
나는 당신이 찾고 있는 것이 파이프라고 믿습니다. 파일 시스템에서 이는 파일과 매우 비슷해 보이지만 한쪽에 기록된 데이터를 다른 쪽에서 읽을 수 있습니다. 이는 |
와 같은 유비쿼터스 연산자의 배후에서 벌어지고 있는 일입니다 id | nl
.
mkfifo
해당 명령을 사용하여 파이프를 만들 거나 mknod p
원하는 경우 사용할 수 있습니다 .
터미널 1
mkfifo /tmp/pipe # Create the pipe
ls -l /tmp/pipe # Notice the first character is 'p'
echo hello > /tmp/pipe # Write to it
rm -f /tmp/pipe # Remove the pipe
NO2.
cat /tmp/pipe # Read from the other side of the pipe
터미널 #2 코드를 이와 같이 확장할 수 있습니다. 하지만 파이프에서 새로 읽을 때마다(실제로 열기/읽기/닫기) 새로운 데이터를 공급해야 한다는 점을 기억하세요.
read VAR </tmp/pipe # Read one line from the pipe
VAR=(cat /tmp/pipe) # Read from the pipe until EOF