Il y a t'il une solution plus simple pour éviter de créer pleins de fichier texte ?
J'ai essayé de faire export $var1 mais impossible de la récupérer dans les autres scripts.
Est-il possible de les enregistrer en variable système pour tous les utilisateurs ?
Sinon comment faire pour enregistrer toutes les variables dans le même fichier texte?
Autre problème que j'ai, j'utilise souvent les mêmes commande ou série de commande
Par exemple :
COUNTPRESENT=$((COUNTPRESENT+1)) && COUNTABSENT=0 && ETAT=PRESENCE && USER=USER1
Est t'il possible d'enregistrer la commande dans une variable puis de réutiliser plus loin dans le script ?
Le top serait de pouvoir réutiliser la variable crée dans d'autre script.
les commandes qui sont répétées dans un script, ou dans le terminal, devraient être inscrites dans une fonction. mais pas tel que tu le montres. ça ne constitue pas vraiment une commande, mais une suite d'assignations.
- Edité par dantonq 23 février 2017 à 23:42:05
Validez la réponse utile « Un problème clairement exposé est à moitié résolu. » Pas de MP technique
Merci,
Pour le script qui enregistre dans fichierSource ça marche.
Dans script_2, le . de ". fichierSource" correspondant à quoi exactement? Récupérer toutes les variable du fichier? Identique à la commande source ?
Par contre comment ajouter de nouvelle variable dans fichierSource à la suite sans écraser celle d'avant ?
Pareil pour mettre à jour une variable dans la liste.
Si j'utilise >> fichierSource il va les rajouter à la suite sans s’occuper si elle existe déjà.
oui, ça source le script indiqué, mais source n'est pas POSIX, et puis c'est trop long à écrire.
ah, il va falloir écrire une 'tite fonction, à exécuter à la fin du script, pour mettre à jour les variables du fichierAsourcer à coup de sed. mais bon, si les variables doivent ne servir que dans un seul script, à la rigueur écrase le fichierAsourcer avec toutes les variables du script.
Validez la réponse utile « Un problème clairement exposé est à moitié résolu. » Pas de MP technique
Non justement je les utilises dans plusieurs script ou alors il faut que je réenregistre toutes les variables dans le fichier fichierAsourcer a la fin de chaque script. Mais je je rajoute de nouvelle variable je devrait tous modifier.
Comment il faudrait faire avec le sed ?
ils font tous la domotique du même site, et ils ont probablement beaucoup de code en commun.
je ferais un script avec des fonctions (au lieu de faire plusieurs scripts), que j'appellerais en testant le premier argument du script pour exécuter telle ou telle fonction, ou tel enchainement de fonctions.
en guise de hors-d'œuvre voici les premières fonctions, qui seront, elles aussi, sourcées dans le script :
# ./fonctionsAsourcer
# **fichier à sourcer pour charger les fonctions** #
getEnv()
{
set | sed -n '/_=/,${/_=/d;/^[[:alpha:]][[:alnum:]]*=/p}'
}
updateSource()
{
(
while IFS='=' read var val
do
test -n "$rgx" && rgx="$rgx;s/^\($var=\).*/\1$val/" || rgx="s/^\($var=\).*/\1$val/"
done < <(getEnv)
sed -i "$rgx" ./fichierAsourcer
)
diff --old-line-format= --unchanged-line-format= --new-line-format=%L <( sort ./fichierAsourcer) <(getEnv | sort) >> ./fichierAsourcer
}
Ok j'ai tester, je vois le principe, ca enregistre toutes les variable dans fichierAsourcer. Mais si je doit avouer ne ne comprend pas trop le fonctionnent de fonctionsAsourcer, on est plus sur du #!/bin/bash?
la variable TEST n'est pas pris en compte, elle est en majuscule?
Pour m'y retrouver dans mes script j'utilise des non de variable en majuscule pour les communes. (Est-il possible dans fonctionsAsourcer de ne récupérer que les variable en majuscule ?)
Pour la variable url j'ai l'erreur suivante, et var1S1 ce duplique
non, c'est tout entier 100% bash complètement. Il n'y a pas de shebang, et le fichier n'a pas besoin d'être exécutable parcequ'il est sourcé dans un script, qui, lui, est interprété par bash, et est lui-même exécutable, ou exécuté en appelant bash.
tu n'es pas censé utiliser des noms de variables entièrement en majuscules. par convention, c'est réservé aux variables d'environnement. pour éviter les téléscopages, les variables créées par l'utilisateur doivent avoir un nom en minuscules ou panaché.
cependant, ça ne suffit pas à résoudre le problème. si l'initiale est en majuscule, elle est rangée par la commande set parmi les variables d'environnement, au-dessus de _= qui me sert de repère.
pour les URL, le slash pose problème parce qu'il est utilisé par sed pour séparer les différentes parties de ses commandes.
ma solution : ajouter cette ligne val="${val//\//\\/}", sous le do, et avant le test, dans la fonction updateSource.
Validez la réponse utile « Un problème clairement exposé est à moitié résolu. » Pas de MP technique
un panaché est un mélange, donc que les noms ne soient pas entièrement en majuscules; avec une restriction, dans le cas présent, que les noms doivent ne pas commencer par une majuscule.
en effet, tu peux adapter la fonction getEnv pour qu'elle ne conserve que les variables dont le nom commence par var_
Validez la réponse utile « Un problème clairement exposé est à moitié résolu. » Pas de MP technique
à la rigueur, tu peux la laisser telle quelle est. ainsi construite :
/_=/,$ #cherche entre le motif _= et la fin de l'entrée
{ #groupe de commandes
/_=/d #supprime la ligne contenant ce motif
/^[[:alpha:]][[:alnum:]]*=/p #affiche les lignes qui commencent par une lettre suivie de lettres et/ou de chiffres, ou pas, puis le signe égal. à la place, tu pourrais mettre /^var_[[:alnum:]_]*=/p #afficher les lignes qui commencent par var_ suivi par lettre(s)/chiffre(s) ou soulignement, ou pas.
} #fin groupe
àmha, c'est superflu : contente-toi de réécrire les noms des variables de telle sorte qu'ils ne commencent pas par une majuscule. il faut prendre soin d'indiquer cette spécificité dans le commentaire de description au début du script.
Validez la réponse utile « Un problème clairement exposé est à moitié résolu. » Pas de MP technique
Tres bien merci, ça marche comme je veux. Je vais voir ce qui sera le plus simple par rapport à mes script.
Réutilisation de variable entre script
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Validez la réponse utile « Un problème clairement exposé est à moitié résolu. » Pas de MP technique
Validez la réponse utile « Un problème clairement exposé est à moitié résolu. » Pas de MP technique
Validez la réponse utile « Un problème clairement exposé est à moitié résolu. » Pas de MP technique
Validez la réponse utile « Un problème clairement exposé est à moitié résolu. » Pas de MP technique
Validez la réponse utile « Un problème clairement exposé est à moitié résolu. » Pas de MP technique
Validez la réponse utile « Un problème clairement exposé est à moitié résolu. » Pas de MP technique