Function 如何在fish shell中使用带有函数的xargs?
我需要使用xargs在fish shell中并行调用函数。我试过这个:Function 如何在fish shell中使用带有函数的xargs?,function,fish,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 } e
#!/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 $@' _
xargs
命令需要和外部命令。你不能给它一个函数。您正在尝试的操作无法与bash、zsh、ksh或任何类似的shell一起使用。方法是将函数放入名为func的文件中,该文件位于路径中
:
#!/bin/fish
function func
echo $argv
end
func $argv
现在它已经实现为一个外部命令(shell脚本),您可以将它与xargs一起使用:
echo'example'| xargs func
正如Kurtis所说,xargs不能与函数一起使用。它可以通过发射另一个炮弹来工作,但这是一种黑客行为
对您来说更好的方法可能是根本不使用xargs
而不是
echo 'example' | xargs func
只需运行func示例
一般来说,应该使用fish的命令替换
所以不是
somecommand | xargs func
使用
这将在换行符上拆分
somecommand
s输出,严格来说比xargs
更严格(默认情况下将在“空白”和换行符上拆分,但它将允许类似shell的引用和转义),这通常是您想要的。它在bash上进行了一些修改。就像这样的回答:在fish中没有类似的方法吗?在我看来,bashexport-f some_func
特性是一个错误。使用shell函数的原因是它可以修改当前shell的状态。以这种方式导出函数使得这不可能。我知道我可以把它们放在不同的脚本中,但我这里有很多函数,为了组织的问题,我不想把它们放在不同的脚本中。请再次阅读我的答案,@SérgioMucciaccia。它在bash中工作只是因为bash有一个反特性(即,一些永远不应该实现的特性)。shell函数的一个要点是,它们可以修改shell的状态。根据定义,export-f some_func
功能意味着some_func
无法修改当前shell的状态。在这种情况下,您应该将其作为脚本实现。因为这就是在后台发生的事情。我想使用xargs,因为-n1选项,所以我可以并行多次调用函数。在xargs上还有其他有用的选项。没有办法像命令一样调用函数,创建一个新进程吗?没有。你必须调用fish-c
,而不是直接调用函数。这也是您使用bash所做的,只是fish无法“导出”函数,因此它需要全局可用(例如通过自动加载)或显式地源代码d。似乎我无法通过fish-c
传递参数。例如sh-c'cat$0''a.txt'
起作用,参数a.txt被传递给cat,但是fish-c'cat$argv''a.txt'
不起作用。如何将动态参数传递给fish-c
命令?
func (somecommand)