以下のスクリプトがあります。
find /path -type f |
sed -re 'stuff' |
xargs -Ix sh -c '{
echo "information about x"
./exe < x
read
}'
私の目標は、各ファイルxargs
をexe
。代わりに、各ファイルの出力を研究し、その出力を研究してから続けたいと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
私はこのアプローチがより効率的であり(このインタラクティブな状況では実際には問題ではありません)、より移植性が高く、構文が少なく、読みやすくなりやすくなることがわかります。