我有一个如下所示的脚本。
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
from /dev/tty
,如下所示:
read reply < /dev/tty
您可以在 shell 中有效地实现相同的结果,而无需使用xargs
或直接执行新的 shell 来处理每个文件:
find /path -type f |
sed -re 'stuff' |
while IFS= read -r x
do
echo "information about $x"
./exe < "$x"
read reply < /dev/tty
done
我想您会发现这种方法更高效(在这种交互式情况下并不是真正的问题),更可移植,需要更少的语法,并且更易于阅读和维护。