Bash 스크립트에서 Linux 직렬 포트에 쓰기

Bash 스크립트에서 Linux 직렬 포트에 쓰기

안녕하세요, 저는 라즈베리 파이를 사용하고 있으며 bash 스크립트에서 USB 직렬 포트에 쓰려고 합니다. 나는 echo가 올바른 방법이라는 것을 알았습니다. 또한 쓰는 동안 포트가 사용 중인지 테스트하고 싶습니다. 그래서 저는 이 스크립트를 사용하고 있습니다.

#! /bin/bash
if  echo -e "USB Command" >> /dev/ttyACM0 ; then
    echo "Success"
else
    echo "Fail"
fi

그런데 문제는 해당 포트에 접근할 수 있는 권한이 없어도 항상 성공한다는 점입니다. 포트에 쓰는 가장 좋은 방법을 사용하고 있습니까? 쓰기 성공 여부를 확인하는 방법은 무엇입니까? 감사해요

편집: 이것은 출력입니다:

ls -l /dev/ttyACM0

crw-rw---- 1 root dialout 166, 0 Dec 13 16:38 /dev/ttyACM0

답변1

스크립트를 확인하세요. 내 생각에 당신이 원하는 것은 echo 명령의 반환 코드를 테스트하는 것입니다.

예를 들어 명령 프롬프트에서 echo를 실행하는 경우:

$ echo -e "USB Command" >> /dev/ttyACM0

종료한 후 즉시 반환 코드를 확인하십시오.

$ echo $?
0

성공여부를 판단할 수 있어야 합니다. 적어도 성공적으로 데이터를 tty로 가져왔습니다.

반환 코드 0은 성공을 나타냅니다. 그 밖의 모든 것은 오류이며 0이 아닌 오류 코드를 검색해 보면 그 의미를 알 수 있습니다.

수동으로 작업한 다음 이를 스크립트에 통합하는 방법을 알아보세요.

.

답변2

뭔가 당신에게 나쁜 일이 있습니다:

echo Hello >> /dev/mem; echo $?
bash: /dev/mem: Permission denied
1

클래식 Unix 권한에 대해 이야기하고 있는데 장치에 액세스할 수 있는 권한이 없으면 명령이 절대 실패합니다.

udev규칙을 사용 하거나 echo 123 | sudo tee /dev/device문제를 해결하십시오.

관련 정보