shスクリプトを使用して16進データを/ dev / ttyUSB0に送信する方法は?

shスクリプトを使用して16進データを/ dev / ttyUSB0に送信する方法は?

私はbashをサポートせず、sshターミナルでshだけをサポートするペアである組み込みLinuxインストールを使用しています。接続したUSBデバイスに16進データを送信する必要があります/dev/ttyUSB0。 bash(Ubuntu 18.04デスクトップインストール)では簡単にこれを行うことができますが、echo -en '\x01\x02\x03' > /dev/ttyUSB0shはバックスラッシュエスケープをサポートしていないようです。 shを使用してこれを行う比較的単純な(またはそれほど簡単ではない)別の方法はありますか?

残念ながら$SHELL --version何も返されません。カーネルバージョンは4.1.0です。

ベストアンサー1

これが理由の一つですprintfがechoより良い理由echoオプションとバックスラッシュエスケープをサポートするかどうかは実装によって異なりますが、すべてのバージョンはprintfバックスラッシュエスケープをサポートする必要があります。

唯一の問題は、標準のような8進数のエスケープ\001しか\x01ないのでprintfprintf "\x01"

それでも機能しない場合は、8進数に切り替える必要があります。プログラマの電卓を使用してオフラインで変換を実行するか、printf "%o\n" "0x61"変換などを使用するか、次のものを使用して文字列を一括変換します。

echo 'foo\x01\x61' | perl -pe 's/\\x([0-9a-fA-F]{2})/sprintf("\\%03o", hex($1))/ge'

(それは与えなければならないfoo\001\141

おすすめ記事