экспорт функции из zsh в bash для использования в GNU parallel


Как мне экспортировать функцию из zsh, чтобы я мог использовать ее в GNU parallel?

Пример:

function my_func(){ echo $1;}
export -f my_func
parallel "my_func {}" :::  1 2

В Баш выведет

1
2

Тогда как в zsh он будет выводить сообщения об ошибках

/bin/bash: my_func: command not found
/bin/bash: my_func: command not found
3 7

3 ответа:

zsh не имеет понятия об экспорте функций. export -f somefunc выведет определение функции, она не будет экспортировать функцию.

Вместо этого вы можете полагаться на то, что функции bash экспортируются как регулярные переменные, начиная с ():

export my_func='() { echo "$1"; }'
parallel --gnu "my_func {}" ::: 1 2 

Основываясь на ответе того парня. Вы можете написать функцию, которая экспортирует уже определенную функцию zsh в bash

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

Многое изменилось с 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