Jak korzystać ze zdefiniowanej funkcji w xargs

16

To jest mój kod

#!/bin/bash

showword() {
  echo $1
}

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

Mam więc funkcję, showwordktóra powtarza dowolny ciąg przekazany jako parametr funkcji.

Następnie xargspróbuję wywołać funkcję i przekazać jedno słowo na raz do funkcji i uruchomić równolegle 2 kopie funkcji. To, co nie działa, to xargsnie rozpoznaje funkcji. Jak mogę osiągnąć to, co próbuję zrobić, jak sprawić, by xargs działał z tą funkcją showword?

GMaster
źródło
Omówiono również w stackoverflow.com/questions/11003418/…
Joshua Goldberg

Odpowiedzi:

25

Spróbuj wyeksportować funkcję, a następnie wywołać ją w podpowłoce:

showword() {
  echo $1
}

export -f showword
echo This is a sample message | xargs -d' ' -t -n1 -P2 bash -c 'showword "$@"' _
Cuonglm
źródło
Dzięki, ale co myślisz o mojej odpowiedzi powyżej?
GMaster
@FazleA .: Zamierzam to skomentować, ale ponieważ pytasz tutaj, odpowiem tutaj. To nie zadziała, ponieważ kiedy nie przekazałeś żadnego parametru do showword.
cuonglm
2
Jeszcze jedno pytanie, dlaczego końcowy _ jest wymagany? Czy to ma powstrzymać Xargs przed przetwarzaniem czegokolwiek innego?
GMaster
4
@FazleA .: przeczytaj unix.stackexchange.com/questions/152391/…
cuonglm
Dostaję komunikat „eksport: niedozwolona opcja -f” podczas eksportu -f
Sagar Chamling,