【问题标题】:How to make a shell script executed by xargs accept user input?如何使 xargs 执行的 shell 脚本接受用户输入?
【发布时间】:2021-08-01 20:34:47
【问题描述】:

我尝试使用find . -name "<pattern>" -print0 | xargs -0 sh 执行多个名称与某些模式匹配的脚本。但是一些匹配的脚本需要获取用户输入,比如read -r var,执行只是忽略它们而不等待输入。

例如

% cat a.sh
printf "Input the value of var:"
read -r var
printf "var=$var\n"

% sh a.sh
Input the value of var:<my_input>
var=<my_input>

% xargs <<< "a.sh" sh
Input value of var:var=

为什么xargs 执行不等待输入?有没有办法解决这个问题?

谢谢。

【问题讨论】:

  • shell 脚本从管道继承它的标准输入。 shell 从 xargs 继承其标准输入。问题根本不在于 xargs。问题是有人将“标准输入”与“用户输入”混为一谈。如果 shell 脚本想要读取“用户输入”,它可能应该从 /dev/tty 而不是 stdin 读取。
  • @WilliamPursell 非常感谢。 read -r var &lt; /dev/tty 工作正常。

标签: shell stdin xargs


【解决方案1】:

感谢@William Pursell 的评论。 read -r var &lt; /dev/tty 解决了这个问题。

【讨论】:

    猜你喜欢
    • 2011-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-06
    • 1970-01-01
    • 2011-10-24
    相关资源
    最近更新 更多