cat 메소드를 통해 동적 입력 데이터를 변수에 넣어보세요.

cat 메소드를 통해 동적 입력 데이터를 변수에 넣어보세요.

ttyS0에서 데이터를 수집하여 변수에 넣을 수 있는 bash 스크립트를 작성하려고 합니다.

직렬 회선의 장치와 통신해야 하며 모듈은 AT 명령을 수신할 수 있습니다. AT 명령을 수신하려면 echo > ttyS0을 사용하여 보내고 관련 응답을 변수에 캡처할 수 있습니다. 수신된 답변을 변수(예: cat /dev/ttyS0 & )에 저장하지 않고도 이 작업을 수행할 수 있지만, 이 데이터를 변수(예: VAR=$(cat /dev/ttyS0 &) )에 넣으려고 하면 작동하지 않습니다(모듈 응답 후 VAR에서 아무것도 찾을 수 없습니다).

gnome 터미널을 통해 다음을 "수동으로" 수행할 수 있습니다(저는 Ubuntu 배포판을 사용하고 있습니다).

  1. (A)라는 GNOME 터미널에서 (루트로) 실행합니다.

    # VAR=$(cat /dev/ttyS0) 
    

    이 명령은 실행 중이거나 입력을 기다리고 #있을 수 있으므로 루트 프롬프트로 돌아가지 않습니다 .cat /dev/ttyS0

  2. 내가 전화한 다른 GNOME 터미널에서 (B), 나는 다음을 실행했습니다.

    # echo -en "hello in VAR\r" > /dev/ttyS0 
    

    끈 은 고양이가 넣어야 hello in VAR해요/dev/ttyS0VAR

  3. 그런 다음 (B)에서:

    # killall cat
    

    그놈 터미널(A)에서 프롬프트( #)가 반환되는 것을 볼 수 있습니다.

  4. 마지막으로 그놈 터미널(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

관련 정보