xargsで定義された関数を使用する方法

xargsで定義された関数を使用する方法

これは私のコードです

#!/bin/bash

showword() {
  echo $1
}

echo This is a sample message | xargs -d' ' -t -n1 -P2 showword

showwordしたがって、関数に引数として渡す文字列をエコーする関数があります。

その後、xargs関数を呼び出し、一度に1つの単語を渡し、関数の2つのコピーを並列に実行してみました。うまくいかないのは、xargs機能が認識されないことです。私が望むことをどのように達成できますか? xargsがこの機能で動作するようにするにはどうすればよいですかshowword

ベストアンサー1

関数をエクスポートしてサブシェルから呼び出してみてください。

showword() {
  echo $1
}

export -f showword
echo This is a sample message | xargs -d' ' -t -n1 -P2 bash -c 'showword "$@"' _

これによりxargs実行が発生します。

bash -c 'showword "$@"' _ This
bash -c 'showword "$@"' _ is
bash -c 'showword "$@"' _ a

コマンドに渡された引数はbashbash環境に渡されますが、0から始まります。したがって、関数内では

  • $0" _"、  $1" This"です。
  • $0" _"、  $1" is"です。
  • $0" _"、  $1" a"です。
  •       ︙

バラより位置引数を持つ Bash -c

これはexport -fBashでのみ動作し、()はGNUでのみ動作します。-Pn--max-procs=max-procsxargs

おすすめ記事