экспорт функции из 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 ответа:
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