Как использовать определенную функцию с xargs

16

Это мой код

#!/bin/bash

showword() {
  echo $1
}

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

Итак, у меня есть функция, showwordкоторая отображает любую строку, которую вы передаете в качестве параметра функции.

Затем я xargsпытаюсь вызвать функцию и передать ей по одному слову за раз, и параллельно запустить 2 копии функции. То, что не работает xargs, не распознает функцию. Как мне добиться того, что я пытаюсь сделать, как заставить Xargs работать с этой функцией showword?

GMaster
источник
Также обсуждается в stackoverflow.com/questions/11003418/…
Джошуа Голдберг

Ответы:

25

Попробуйте экспортировать функцию, а затем вызвать ее в подоболочке:

showword() {
  echo $1
}

export -f showword
echo This is a sample message | xargs -d' ' -t -n1 -P2 bash -c 'showword "$@"' _
cuonglm
источник
Спасибо, но что вы думаете о моем ответе выше?
GMaster
@FazleA .: Я намерен это прокомментировать, но, поскольку вы спрашиваете здесь, я отвечу здесь. Это не сработает, так как, когда вы не передали ни одного параметра showword.
cuonglm
2
Еще один вопрос, почему трейлинг _ требуется? Это мешает Xargs обрабатывать что-нибудь еще?
GMaster
4
@FazleA .: читать unix.stackexchange.com/questions/152391/…
cuonglm
Я получаю «export: Illegal option -f», когда я делаю экспорт -f
Сагар Чамлинг