如何在鱼壳中使用带有函数的xargs?

时间:2018-06-11 21:47:17

标签: function fish

我需要使用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 $@' _

2 个答案:

答案 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的引用和转义),这通常是你想要的。