【发布时间】: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 < /dev/tty工作正常。