在 xargs 中暂停(通过读取或类似操作)

在 xargs 中暂停(通过读取或类似操作)

我有一个如下所示的脚本。

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

您可以将输入重定向到readfrom /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

我想您会发现这种方法更高效(在这种交互式情况下并不是真正的问题),更可移植,需要更少的语法,并且更易于阅读和维护。

相关内容