Ho un codice come questo:Export non funzionante (da una funzione chiamata per ottenere la sua eco)
#!/usr/bin/env bash
test_this(){
export ABC="ABC"
echo "some output"
}
final_output="the otput is $(test_this)"
echo "$ABC"
Purtroppo la variabile ABC
non si sta impostando.
Devo chiamare lo test_this
in questo modo, dal momento che nel mio programma reale gli deduco alcuni argomenti, esegue varie operazioni complicate chiamando varie altre funzioni, che sulla strada esportano questo o quello (in base a tali argomenti), e alla fine viene assemblata una stringa di output da restituire. Chiamarlo due volte, una volta per ottenere le esportazioni e una volta per la stringa di output sarebbe male.
La domanda è: cosa posso fare per avere le esportazioni e la stringa di output in atto, ma solo per una chiamata a tale funzione?
La risposta che io sono felice con (grazie paxdiablo):
#!/usr/bin/env bash
test_this(){
export ABC="ABC"
export A_VERY_OBSCURE_NAME="some output"
}
test_this
final_output="the otput is $A_VERY_OBSCURE_NAME"
echo "$ABC" #works!
unset A_VERY_OBSCURE_NAME
Grazie per questa intuizione, ma non mi aiuta. C'è un modo per chiamare o modificare questa funzione, in modo che io possa esportare l'esportazione all'esterno? – robert
@robert: vedere l'aggiornamento. Il tuo vero problema è che '$()' crea necessariamente un sottoprocesso quindi qualsiasi modifica dell'ambiente sarà limitata a quel sottoprocesso. Se invece si chiama direttamente la funzione, è possibile influire sull'ambiente di processo corrente. – paxdiablo
Grazie, sono andato con la seconda opzione, aggiungendo alla fine: unset OUTPUT. – robert