これは私のコードです
#!/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
︙
コマンドに渡された引数はbash
bash環境に渡されますが、0から始まります。したがって、関数内では
$0
"_
"、$1
"This
"です。$0
"_
"、$1
"is
"です。$0
"_
"、$1
"a
"です。- ︙
バラより位置引数を持つ Bash -c。
これはexport -f
Bashでのみ動作し、()はGNUでのみ動作します。-Pn
--max-procs=max-procs
xargs