• [^] # Re: Mais pourquoi est-il aussi méchant ?

    Posté par . En réponse au message zenity : processus père/fils, fifo,.... Évalué à 1.

    MAIS ! Cela ne fonctionne plus si la sortie de la boucle est à son tour 'pipée' dans une commande :
    Là, je sèche... :-/

    Alors, je crois que j'ai la réponse. Prenons ce bout de code :

    while foo-bar; do
    var=blabla
    done |grep toto
    

    Si je comprends bien POSIX dit explicitement (à la fin du chapitre) qu'un sous-shell doit être utilisé dans ce cas :

    Additionally, each command of a multi-command pipeline is in a subshell environment; [...]

    En fait, la commande while foo-bar; do blabla; done est une commande composée (multi-command), et en plus le résultat est pipé, donc ça rentre dans cette définition.

    Donc il n'est pas possible de récupérer la valeur de '${var}' en dehors de la boucle while.

    Donc, si tu veux récupérer sa valeur, tu devras faire un truc du genre :

    tmp_file="$( mktemp /tmp/XXXXXX )"
    while foo-bar; do
    var=blabla
     printf "%s" "${var}" >"${tmp_file}"
    done |grep toto
    var="$(cat "${temp_file}")"
    

    C'est crade, mais ça marche... :-(

    Hop,
    Moi.