如何从zsh导出函数,以便我可以在gnu parallel中使用它?
示例:
function my_func(){ echo $1;}
export -f my_func
parallel "my_func {}" ::: 1 2
bash中的将输出
1
2
而在zsh中它将输出错误消息
/bin/bash: my_func: command not found
/bin/bash: my_func: command not found
答案 0 :(得分:9)
zsh
没有导出函数的概念。 export -f somefunc
将打印函数定义,它不会导出函数。
相反,您可以依赖于bash函数作为常规变量导出的事实,从()
开始:
export my_func='() { echo "$1"; }'
parallel --gnu "my_func {}" ::: 1 2
答案 1 :(得分:6)
根据其他人的答案。您可以编写一个函数来导出已经定义为bash的zsh函数
function exportf (){
export $(echo $1)="`whence -f $1 | sed -e "s/$1 //" `"
}
用法
function my_func(){
echo $1;
echo "hello";
}
exportf my_func
parallel "my_func {}" ::: 1 2
答案 2 :(得分:0)
自2014年以来发生了很多变化。
今天你只需:
# Activate env_parallel function (can be done in .zshenv)
. `which env_parallel.zsh`
function my_func(){ echo $1;}
env_parallel "my_func {}" ::: 1 2
如果您的环境很大:
# Activate env_parallel function (can be done in .zshenv)
. `which env_parallel.zsh`
# Record which environment to ignore
env_parallel --session
function my_func(){ echo $1;}
env_parallel "my_func {}" ::: 1 2
答案 3 :(得分:0)
这种方法允许您在zsh中定义一个函数(而不必担心添加引号级别)。此外,它不需要添加其他软件。
执行功能。这是一个:
function bar {
echo bar
echo $1
}
旋转它:
seq 10 | xargs -I{} -n1 -P1 zsh -c "$(whence -f bar); bar {}"
我目前正在使用xargs,但是对于GNU Parallel,当然使用相同的方法,所以我想在这里分享它。