catメソッドを使用して動的入力データを変数に入れます。

catメソッドを使用して動的入力データを変数に入れます。

ttyS0からデータを収集して変数に入れることができるbashスクリプトを作成しようとしています。

シリアルラインのデバイスと通信する必要があり、モジュールはATコマンドを受信できます。 ATコマンドを受信するには、echo> ttyS0を使用して送信し、関連する応答を変数にキャプチャできます。受け取った回答を変数(例:cat /dev/ttyS0&)に保存することなくこれを実行できますが、このデータを変数(例:VAR = $(cat / dev / ttyS0&))に入れようとすると動作しません(モジュール応答後にVARに何も見つかりません)。

gnome端末を使用すると、次のことを「手動で」実行できます(私はUbuntuディストリビューションを使用しています)。

  1. (A)というGNOME端末で(rootとして)実行します。

    # VAR=$(cat /dev/ttyS0) 
    

    このコマンドは実行中または入力を待っている可能性が#あるため、ルートプロンプトに戻りません。cat /dev/ttyS0

  2. 私が電話した他のGNOME端末で(B)、私は次のことを実行しました。

    # echo -en "hello in VAR\r" > /dev/ttyS0 
    

    ひもは猫を入れなければhello in VARなりません。/dev/ttyS0VAR

  3. 次に(B)から:

    # killall cat
    

    GNOME端末(A)からプロンプト(#)が返されることがわかります。

  4. 最後に、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

関連情報