0

我有一个这样的示例代码:

CMD="svn up blablabla | grep -v .tgz"
echo $CMD | xargs -n -P ${PARALLEL:=20} -- bash -c

目的是并行运行 svn update。但是当遇到冲突时,应该提示几个选项供用户选择,它只是通过,而不等待用户输入。并显示错误:

Conflict discovered in 'blablabla'.
Select: (p) postpone, (df) diff-full, (e) edit,
    (mc) mine-conflict, (tc) theirs-conflict,
    (s) show all options: svn: Can't read stdin: End of file found

有没有什么办法解决这一问题?

谢谢

4

2 回答 2

0

是的,有办法解决这个问题!请参阅如何从使用 xargs 运行的脚本中提示用户的答案。长话短说,使用

xargs -a FILENAME your_script

或者

xargs -a <(cat FILENAME) your_script

第一个版本实际上从文件中读取行,第二个版本伪造从文件中读取行,这便于在带有 awk 或 perl 的管道链中使用 xargs。如果您不想在空格上中断,请记住使用 -0 标志!

于 2012-08-02T17:50:35.540 回答
0

另一个不依赖 Bash 而是依赖GNU 风格的 xargs 的解决方案是使用-oor--open-tty选项:

echo $CMD | xargs -n -P ${PARALLEL:=20} --open-tty -- bash -c

从手册页:

-o, --open-tty
       Reopen  stdin as /dev/tty in the child process before executing the command.  This is use‐
       ful if you want xargs to run an interactive application.
于 2021-08-20T13:10:13.810 回答