la variable no se ve afectada en shell

ls -l ${1}/${2}/${i}*| awk '{  print  $5 " " $6 " " $7 " " $8 " " $9}' | ( while read Taille Mois Jour HeureOuAnnee Fichier

         do
            DateFichierEntreHierAujourdhui $Mois $Jour $HeureOuAnnee
            if [ $? -eq 0 ]
            then
                  NbFicREcu_links=`expr ${NbFicREcu_links} + 1`
            fi                
         done

         if [ $NbFicREcu_links -eq 0 ]
         then
            echo 'i am here 1'
            echo ${i}
            INT14_KO_FR=1
         else   
            echo 'i am here 2'
         fi
         )       
         fi
echo "1- in the end of the fonction INT14_KO_FR=${INT14_KO_FR}"

Este fragmento de código detecta si carece de archivos específicos. De hecho, cuando entramos en el bloque que imprime 'Estoy aquí 1', quiero hacer INT14_KO_FR=1. Pero cuando salgo de este bucle, INT14_KO_FR siempre es 0, el valor inicial. El código ingresa en 'Estoy aquí 1' por 2 veces. Es muy raro, gracias chicos por su ayuda.

preguntado el 19 de mayo de 14 a las 15:05

1 Respuestas

La tubería se ejecuta en un subshell, así que cualquiera las variables establecidas dentro no están dentro del alcance del código externo. Allí se mencionan diferentes soluciones alternativas, según las funciones de idioma con las que esté familiarizado y si necesita ser compatible con POSIX.

contestado el 19 de mayo de 14 a las 15:05

¡Eso es realmente útil! Pero será mejor que no destruya el trabajo previo hecho por los demás. ¿Es posible hacer este afecto? con un tubo en una subcapa? - ZHE ZHAO

Si desea mantener el valor, debe almacenarlo en un archivo o usar una estructura diferente, como se explica en el último enlace. - l0b0

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.