入力が書き込まれるたびに、名前付きパイプを読み取ります。

入力が書き込まれるたびに、名前付きパイプを読み取ります。

読み取る名前付きパイプにエコーされたコマンドを実行するbashプログラムを作成する必要がありますが、コマンドを送信するだけでは機能しません。新しいコマンドが作成されるまで、前のコマンドを繰り返し続けます。

それは:

  1. 実装する./read_pipe.sh
  2. コマンドがエコーされるまで待ってからpipe読みます。
  3. コマンドを一度実行します。 <-ダメなこと。永遠に実行されます。
  4. 手順2から繰り返します。

私のものread_pipe.sh

#!/bin/bash
pipe="mypipe"
if [ ! -p $pipe ]; then
  echo 'Creating pipe'
  mkfifo $pipe
fi

while true
do
  if read line <$pipe; then
    COMMAND=$(cat $pipe)
    echo "Running $COMMAND ..."
    # sh -c $COMMAND
  fi
done

私のcat "echo 'Hello World'" > mypipe出力が常に次のような場合:

Running "echo 'Hello World'" ...
Running "echo 'Hello World'" ...
Running "echo 'Hello World'" ...
Running "echo 'Hello World'" ...
...

コマンドを一度実行して別のエコーコマンドを待つにはどうすればよいですか?

ベストアンサー1

あなたの場合は、単に次のことができます。

tail -f $pipe | sh & 

屋根は必要ありません。

おすすめ記事