Je travaille sur un shell script qui, lorsqu'il est ouvert pour la première fois, demande à l'utilisateur quelques informations. Ces informations doivent être stockées dans un fichier de configuration pour une utilisation future afin que l'utilisateur n'ait pas à répondre aux mêmes questions à chaque fois que le programme s'ouvre. Bien sûr, je prévois d'écrire une instruction if pour vérifier si l'info est dans le fichier de configuration chaque fois que le script est utilisé, mais je ne sais pas comment créer un fichier de configuration. Je voudrais savoir comment je peux faire cela à partir du shell script lui-même, de sorte que si une personne télécharge mon script et l'utilise, le fichier de configuration est créé pour elle. J'aimerais aussi savoir comment je peux ajouter les infos dans le fichier de configuration à partir du script. Merci pour votre aide.
Réponses
Trop de publicités?Une solution que je vois souvent est d'écrire un fichier de configuration comme ceci :
cat <<EOF > ~/.app/config
var1=$var1
var2=$var2
EOF
Ensuite, ce fichier de configuration est lui-même un script shell approprié, et peut être extrait par le shell script au démarrage, comme ceci :
[ -e ~/.app/config ] && source ~/.app/config
Le sourcer (plutôt que de l'exécuter comme une commande) garantit que toutes les variables qu'il définit seront visibles dans le script qui l'a sourcé.
Ensuite, bien sûr, vous voudrez procéder à une personnalisation dirigée par l'utilisateur après le sourçage, mais avant d'écrire la nouvelle version.
Caveat Emptor
Cette méthode convient pour quelque chose de rapide et de sale, ou pour quelque chose que vous êtes seul à toucher. Cependant, le sourcing d'un script exécute tout le code qu'il contient, dans la session en cours. Cela signifie qu'il peut rm -rf /
Il pourrait également redéfinir les fonctions ou les variables que vous avez définies dans votre script principal, en les remplaçant.
Vous pouvez utiliser un code comme celui-ci :
RC_PATH="~/.myscriptrc"
echo $var1 > $RC_PATH
echo $var2 >> $RC_PATH
var1
y var2
seront séparés par un saut de ligne et stockés dans le fichier ~/.myscriptrc
fichier de configuration. Ainsi, étant donné var1=Foo
y var2=Bar
le ~/.myscriptrc
sera :
Foo
Bar
Encore un OP qui pense que le SO est son centre de développement personnel. Vous n'avez même pas pris la peine de regarder les autres questions similaires à la sienne, comme : este o este et autres.
Comme vous pouvez rencontrer de sérieux problèmes, je vais vous recommander une solution :
- recherchez sur google la sécurité des fichiers de configuration bash
et vous trouverez que jamais source
toute variable de configuration, car c'est dangereux. Par exemple, que se passe-t-il lorsque vous source
le prochain fichier de configuration ?
MAINPATH=/some/path/here;rm -rf / &
Donc, vous devriez
- coder en dur les valeurs par défaut de votre application dans le code, et
- et lors de la lecture du fichier de configuration, vous MUST assurer que le sauvé valeurs ne contient pas de choses dangereuses (comme ci-dessus), donc ne contient pas de caractères
;
ou back-tick ou&
et autres. Le mieux est qu'il ne contienne que [A-Za-z0-9_/] et pas d'autres. Ceci est appelé désinfection valeurs de configuration.
Le mieux que vous puissiez faire est d'utiliser un outil plus puissant pour analyser les fichiers de configuration, par exemple perl, awk ou autre.
Et la prochaine fois, utilisez la recherche google ou SO pour obtenir des réponses. avant de demander ici
Ps : et désolé pour le message, peut-être que je suis réveillé de mauvaise humeur, mais je commence à être en colère contre les OP qui n'ont même pas essayé de trouver une solution nous-mêmes....