11

gnu 並列で使用できるように、zsh から関数をエクスポートするにはどうすればよいですか?

例:

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
4

4 に答える 4

9

zsh関数をエクスポートするという概念はありません。export -f somefunc関数定義を出力しますが、関数はエクスポートしません。

代わりに、bash 関数が で始まる通常の変数としてエクスポートされるという事実に頼ることができます()

export my_func='() { echo "$1"; }'
parallel --gnu "my_func {}" ::: 1 2 
于 2014-03-29T23:58:27.540 に答える
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
于 2014-03-30T02:39:38.327 に答える
2

このアプローチにより、zsh で関数を定義できます (引用レベルの追加を気にする必要はありません)。また、追加のソフトウェアを追加する必要もありません。

関数を作成します。ここに1つあります:

function bar {
    echo bar
    echo $1
}

そしてそれをスピンアップします:

seq 10 | xargs -I{} -n1 -P1 zsh -c "$(whence -f bar); bar {}"

現時点では xargs を使用していますが、もちろん GNU Parallel でも同じアプローチが機能するので、ここで共有したいと思います。

于 2020-04-09T19:38:54.157 に答える