如何从使用 xargs 运行的脚本中提示用户

dre*_*cko 6 bash xargs

我正在使用 xargs 将参数填充到我想要停止脚本的脚本中,等待用户输入。就像是:

echo a b c | xargs bash -c 'for a in "$@"; do echo $a; read; done'
Run Code Online (Sandbox Code Playgroud)

read被忽略了。似乎第二个脚本也试图从管道中获取它的输入?我试过了,xargs -p但没有更好。

nos*_*sid 5

如果将选项-a提供给xargs,则将从文件而不是标准输入中读取参数。您可以使用 bash 的进程替换和语法<( ... )来动态创建文件

xargs -a <( echo A B C ) bash -c 'for x in "$@"; do echo $x; read; done'
Run Code Online (Sandbox Code Playgroud)

请注意,此处$@遗漏了第一个参数(在本例中为“A”)。这是因为bash -c放“A”到$0(一般需脚本文件的名称),和$@提供$1$2等等(在此情况下,“B”和“C”)。