xargsで一時停止(読み取りまたは類似)

xargsで一時停止(読み取りまたは類似)

以下のスクリプトがあります。

find /path -type f |
sed -re 'stuff' |
xargs -Ix sh -c '{
  echo "information about x"
  ./exe < x
  read
}'

私の目標は、各ファイルxargsexe。代わりに、各ファイルの出力を研究し、その出力を研究してから続けたいとexe思います。exeだから私は持っていますread

問題はreadここではうまくいかないようです。スクリプトを実行すると、すべての出力が生成されます。この問題を解決する方法に関する提案はありますか?

参考にしてください。いいえ処刑を希望する方法を探していますxargs。代わりに、xargsユーザーが続行するまで無期限に一時停止する方法を探しています。

答え1

read次のように入力をからにリダイレクトできます/dev/tty

read reply < /dev/tty

xargs各ファイルを処理するために新しいシェルを使用したり、直接実行しなくても、シェルで同じ結果を効果的に取得できます。

find /path -type f |
sed -re 'stuff' |
while IFS= read -r x
do
    echo "information about $x"
    ./exe < "$x"
    read reply < /dev/tty
done

私はこのアプローチがより効率的であり(このインタラクティブな状況では実際には問題ではありません)、より移植性が高く、構文が少なく、読みやすくなりやすくなることがわかります。

関連情報