2 votes

Comment créer et accéder à un fichier de configuration shell à partir d'un script ?

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.

3voto

jpaugh Points 1543

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.

0voto

Alexey Points 2047

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

0voto

jm666 Points 17312

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....

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X