使用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'."
Run Code Online (Sandbox Code Playgroud)
现在这是命令:
echo boo hoo | xargs ./fn.sh
Run Code Online (Sandbox Code Playgroud)
现在我想要的是fn.sh
可以读取stdin
以允许用户交互,但这已经被篡夺了xargs
.我想我可以xargs
从一个临时文件中读取,但我想知道它是否可以使用一个未命名的文件.
我从未使用过cygwin,但通常我会这样做:
xargs -a <(echo boo hoo) ./fn.sh
Run Code Online (Sandbox Code Playgroud)
-a
告诉xargs从文件中读取,并且<( )
语法(可能或可能不适用于cygwin)是进程替换,它有效地创建了一个/dev/fd
可以读取的命名对象(命名管道或路径起始),从而产生结果运行随附的命令.
这不像管道语法那么方便,因为你必须将数据源放在xargs
命令的中间,但它在其他方面是等价的.
我发现这个问题试图解决同样的问题,然后仔细查看了 xargs 联机帮助页。
该-o
选项应准确且可预测地完成所需的操作:
-o
: 在执行命令之前,在子进程中将 stdin 重新打开为 /dev/tty。如果您希望 xargs 运行交互式应用程序,这很有用。
只是想更新这个旧问题的答案,因为它是我搜索的第一个结果。