ttyS0からデータを収集して変数に入れることができるbashスクリプトを作成しようとしています。
シリアルラインのデバイスと通信する必要があり、モジュールはATコマンドを受信できます。 ATコマンドを受信するには、echo> ttyS0を使用して送信し、関連する応答を変数にキャプチャできます。受け取った回答を変数(例:cat /dev/ttyS0&)に保存することなくこれを実行できますが、このデータを変数(例:VAR = $(cat / dev / ttyS0&))に入れようとすると動作しません(モジュール応答後にVARに何も見つかりません)。
gnome端末を使用すると、次のことを「手動で」実行できます(私はUbuntuディストリビューションを使用しています)。
(A)というGNOME端末で(rootとして)実行します。
# VAR=$(cat /dev/ttyS0)
このコマンドは実行中または入力を待っている可能性が
#
あるため、ルートプロンプトに戻りません。cat /dev/ttyS0
私が電話した他のGNOME端末で(B)、私は次のことを実行しました。
# echo -en "hello in VAR\r" > /dev/ttyS0
ひもは猫を入れなければ
hello in VAR
なりません。/dev/ttyS0
VAR
次に(B)から:
# killall cat
GNOME端末(A)からプロンプト(
#
)が返されることがわかります。最後に、GNOME端末(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"
私が望むものをどのように実装したり、2つのGNOME端末で何をすることができますか?その後停止します。
答え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