Você basicamente tem três opções:
-
export -f
(que é um recurso bash não POSIX) - Executa um shell que define a função em cada chamada
- Mova a função para um script de shell e execute essa alternativa
A opção 1 é provavelmente a mais fácil de demonstrar, então mostrarei essa:
$ f() { num=$1; echo "$num is an integer"; }
$ export -f f
$ cat Commands.txt
number=1; f "$number"
number=2; f "$number"
number=3; f "$number"
number=4; f "$number"
number=5; f "$number"
$ parallel :::: Commands.txt
1 is an integer
2 is an integer
3 is an integer
4 is an integer
5 is an integer
Observe que sua população de Commands.txt
provavelmente está com erro, você precisa de f "$number"
em Commands.txt
para passar o número, não f number
que passaria a string literal "number". Seu script deve gerar echo "number=$i; f \"\$number\""
(anote as fugas, que são importantes para evitar que $number
seja interpretado em echo
time, ou a "
s que termina a string).