使用xargs
做了一些我没想到的事情,尽管我觉得这有点道理。这不是我所做的,但这是一个应该显示发生了什么的例子。
#!/usr/bin/bash
index=1
for arg in "$@"; do echo "Arg #$index = '$arg'"; let ++index; done
read -p "type something followed by enter: " a
echo "You typed '$a'."
现在这是命令:
echo boo hoo | xargs ./fn.sh
现在我想要的是fn.sh
可以从stdin
读取以允许用户互动,但xargs
已被篡夺。我想我可以从临时文件中读取xargs
,但我想知道它是否可以使用未命名的文件。
答案 0 :(得分:7)
我从未使用过cygwin,但通常我会做这样的事情:
xargs -a <(echo boo hoo) ./fn.sh
-a
告诉xargs从文件中读取,<( )
语法(可能或不适用于cygwin)是进程替换,它有效地创建了一个命名对象(命名管道或一个可以读取的路径/dev/fd
),产生运行所附命令的结果。
这不如管道语法那么方便,因为您必须将数据源放在xargs
命令的中间,但它在其他方面是等效的。
答案 1 :(得分:2)
我发现这个问题试图解决同样的问题,然后仔细看看xargs联机帮助页。
-o
选项应该完全和可预测地完成所需的内容:
-o
:在执行命令之前,在子进程中重新打开stdin为/ dev / tty。如果您希望xargs运行交互式应用程序,这将非常有用。
只是想更新这个旧问题的答案,因为这是我搜索的第一个结果。