Bash 从使用xargs执行的命令中从stdin读入

Bash 从使用xargs执行的命令中从stdin读入,bash,cygwin,xargs,Bash,Cygwin,Xargs,使用xargs做了一些我没有预料到的事情,尽管我觉得这有点道理。这不是我所做的,但这是一个例子,应该表明发生了什么 fn.sh 下面是命令: echo boo hoo | xargs ./fn.sh 现在我想要的是fn.sh可以从stdin中读取,以允许用户交互,但这已经被xargs所取代。我想我可以从临时文件中读取xargs,但我想知道它是否可以使用未命名的文件。我从未使用过cygwin,但通常我会这样做: xargs -a <(echo boo hoo) ./fn.sh xargs

使用
xargs
做了一些我没有预料到的事情,尽管我觉得这有点道理。这不是我所做的,但这是一个例子,应该表明发生了什么

fn.sh 下面是命令:

echo boo hoo | xargs ./fn.sh

现在我想要的是
fn.sh
可以从
stdin
中读取,以允许用户交互,但这已经被
xargs
所取代。我想我可以从临时文件中读取
xargs
,但我想知道它是否可以使用未命名的文件。

我从未使用过cygwin,但通常我会这样做:

xargs -a <(echo boo hoo) ./fn.sh

xargs-a我发现这个问题试图解决同样的问题,然后仔细查看了xargs手册页

-o
选项应准确且可预测地实现所需的功能:

-o
:在执行命令之前,在子进程中将stdin作为/dev/tty重新打开。如果希望xargs运行交互式应用程序,这非常有用


我只是想更新这个老问题的答案,因为这是我搜索的第一个结果。

这很有趣,而且很有效。你在哪里找到那颗宝石的?当管道输入时,为什么它不干扰
/fn.sh
。管道操作符通过将
stdin
重定向到管道来使用未命名管道<代码>非常感谢@rici!我花了一点时间尝试使用(未成功)subshell/{}/$()保持stdin不变,并最终使用了您的解决方案;我花了一个小时想弄明白。
xargs -a <(echo boo hoo) ./fn.sh