Meu caso real é mais complicado, mas esse é o problema que estou tendo.
Exemplo simplificado
echoSimultaneously.bash:
echoSimultaneously() {
parallel -j 0 echo ::: $string
}
run() {
local IFS string
# split on new lines not on white space
# don't have to quote vars/everything
IFS=$'\n'
string=$@
echoSimultaneously $string
}
export -f echoSimultaneously
A função executada seria chamada por outro script, depois que esse script fosse originado por ele, por exemplo, o outro script faria: run {1..10}
, eu poderia chamar run
esse script, mas não é assim que estou fazendo as coisas.
Problemas:
- As variáveis,
IFS
estring
não serão captadas quandoechoSimultaneously
iniciamparallel
seus próprios shells ou instâncias, portanto não estão no escopo. - Fazer
export
nas variáveis também não funciona.
Por favor, não seja pedante com as variáveis não citadas e concentre-se apenas na questão, estou bem ciente das coisas que podem dar errado.
Exemplo, embora seja dado acima
parallel -j 0 echo ::: {1..10}
1
2
3
4
5
6
7
8
9
10
Isso funciona, é claro:
echoSimultaneously() {
IFS=$'\n'
parallel -j 0 echo ::: $@
}
run() {
local IFS string
IFS=$'\n'
string=$@
echoSimultaneously $string
}
export -f echoSimultaneously
IFS
e o parâmetro$@
está definidoechoSimultaneously
para que quando o GNU paralelo seja executado em outro shell, eles sejam selecionados.
Ops, isso foi muito fácil, eu deveria saber...
Isso
export
para as variáveis precisa estar fora das funções.