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 は成功を示します。他のすべてはエラーであり、ゼロ以外のエラーコードを検索してみると、その意味がわかります。

手動で作業し、それをスクリプトに統合する方法を学びます。

答え2

何かあなたに悪いことがあります:

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

クラシックUnix権限について話していますが、デバイスにアクセスする権限がないと、コマンドは失敗します。

udevルールを使用するか、echo 123 | sudo tee /dev/device問題を解決してください。

関連情報