réglage variable globale dans bash
J'ai de la fonction de là où je suis attendu pour accrocher de temps en temps. Donc, je suis à la définition d'une variable globale, puis de le lire, si il n'est pas venu après quelques secondes, j'abandonne. Ci-dessous n'est pas complète code mais il ne fonctionne pas comme je ne suis pas d'obtenir $DÉMARRER en tant que valeur de 5
START=0
ineer()
{
sleep 5
START=5
echo "done $START" ==> I am seeing here it return 5
return $START
}
echo "Starting"
ineer &
while true
do
if [ $START -eq 0 ]
then
echo "Not null $START" ==> But $START here is always 0
else
echo "else $START"
break;
fi
sleep 1;
done
Je soupçonne que l'exécution de la fonction dans le fond qu'il provoque, pour être exécuté dans un shell interne est exécuté, de sorte que la variable modifications ne sont pas répercutées dans le parent de la coquille.
le délai est d'ajustement exact pour moi, mais Il n'a pas à prendre la fonction de commande
Vous pouvez être intéressé par unix.stackexchange.com/questions/87284/... -- rappelez-vous, @user000001 est exactement ce que
Vous pourriez avoir besoin de regarder le
le délai est d'ajustement exact pour moi, mais Il n'a pas à prendre la fonction de commande
Vous pouvez être intéressé par unix.stackexchange.com/questions/87284/... -- rappelez-vous, @user000001 est exactement ce que
ineer
est exécuté dans un shell interne est exécuté et n'a pas partagent le même environnement avec son parent coquille, de sorte que vous allez trouver des solutions de contournement sont (pour la plupart impliquant des fichiers).Vous pourriez avoir besoin de regarder le
timeout
commande à partir de GNU coreutils. Vous pouvez également retrouver en regardant les signaux (trap
et kill
) entre l'enfant et le parent processus.OriginalL'auteur eswaat | 2015-04-16
Vous devez vous connecter pour publier un commentaire.
Vous exécutez
inner
appel de fonction dans le sol en arrière, ce qui signifie que leSTART
sera affecté dans un shell interne est exécuté commencé par le shell courant. Et dans ce shell interne est exécuté, leSTART
valeur sera de 5.Cependant dans votre shell courant, qui
echo
laSTART
valeur, il est encore0
. Depuis la mise à jour deSTART
ne sera dans le shell interne est exécuté.Chaque fois que vous lancez un shell dans le fond, il est tout comme la fourche d'un nouveau processus, qui va faire une copie de tous les shell en cours d'environnements, y compris la valeur de la variable, et le nouveau processus sera d'isoler totalement de votre shell courant.
Depuis le shell interne est exécuté ont été fourchue comme un nouveau processus, il n'existe aucun moyen pour mettre à jour directement la mère de shell
START
valeur. Les autres moyens incluent les signaux de passage lorsque le shell interne est exécuté qui s'exécuteinner
la sortie de la fonction.erreurs courantes:
export
export
ne pouvait être utilisé pour rendre le nom de la variable à la disposition de toute sous-coquille fourche de shell en cours. cependant, une fois que le shell interne est exécuté ont été fourchue. Le shell interne est exécuté aura une nouvelle copie de la variable et la valeur, toute modification de la exporté variable dans le shell n'aura pas d'effet le shell interne est exécuté.Veuillez choisir le code suivant pour plus de détails.
OriginalL'auteur Kun Ling
Le problème est que
ineer &
exécute la fonction dans un shell interne est exécuté, qui est son propre champ pour les variables. Les modifications apportées dans un shell interne est exécuté ne s'appliquent pas à la société mère de shell. Je recommande à la recherche dans tuer et le signal de la chasse.OriginalL'auteur Politank-Z
Enregistrer
pid
deinner &
par:et l'utilisation
kill -0 $pid
(c'est zéro!!) pour détecter si votre processus encore en vie.Mais mieux refonte
inner
à utiliser fichier de verrouillage, c'est plus sûr de vérifier!Mise à JOUR De
KILL(2)
homme page:OriginalL'auteur gavenkoa
La réponse est: dans ce cas, vous pouvez utiliser
export
.Cette instruction permettre à tous les sous-processus d'utilisation de cette variable.
Donc, quand vous allez appeler la
ineer
fonction, il sera à la fourche d'un processus qui consiste à copier l'intégralité de l'environnement, y compris le DÉBUT de variables prises à partir du processus parent.Vous devez modifier la première ligne de:
:
Vous pouvez également lire ce fil: La définition d'une variable avec ou sans exportation
OriginalL'auteur Stefano Falsetto