我需要使用xargs在fish shell中并行调用函数。我试过这个:
#!/bin/fish
function func
echo $argv
end
echo 'example1' 'example2' | xargs -n1 func
但我得到了这个:
xargs: func: No such file or directory
那么,我怎样才能让它发挥作用呢?
使用bash工作:
#!/bin/bash
function func {
echo $1
}
export -f func
echo 'example1' 'example2' | xargs -n1 bash -c 'func $@' _
答案 0 :(得分:4)
xargs
命令需要和外部命令。你不能给它一个功能。您尝试做的事情不会使用bash,zsh,ksh或任何类似的shell。执行此操作的方法是将函数放在PATH
中名为 func 的文件中:
#!/bin/fish
function func
echo $argv
end
func $argv
现在它被实现为外部命令(shell脚本),您可以将它与xargs一起使用:echo 'example' | xargs func
。
答案 1 :(得分:3)
就像Kurtis所说,xargs不适用于函数。它可以通过启动另一个shell来工作,但这是一个黑客。
对你来说可能更有用的是根本不使用xargs。
而不是
echo 'example' | xargs func
只需运行func example
。
一般来说,应该使用鱼的命令替换。
所以而不是
somecommand | xargs func
使用
func (somecommand)
这将在新行上分割somecommand
输出,严格来说,更多严格,而不是xargs
(默认情况下将拆分为“空白”和换行符,但它将允许类似shell的引用和转义),这通常是你想要的。