안녕하세요, 저는 라즈베리 파이를 사용하고 있으며 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
문제를 해결하십시오.