読み取る名前付きパイプにエコーされたコマンドを実行するbashプログラムを作成する必要がありますが、コマンドを送信するだけでは機能しません。新しいコマンドが作成されるまで、前のコマンドを繰り返し続けます。
それは:
- 実装する
./read_pipe.sh
- コマンドがエコーされるまで待ってから
pipe
読みます。 - コマンドを一度実行します。 <-ダメなこと。永遠に実行されます。
- 手順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 &
屋根は必要ありません。