Je veux appeler un fichier de paramètres pour une variable, comment puis-je faire cela dans bash?
Ainsi, le fichier de paramètres définira les variables (par exemple: CONFIG.FILE):
production="liveschool_joe"
playschool="playschool_joe"
Et le script utilisera ces variables dedans
#!/bin/bash
production="/REFERENCE/TO/CONFIG.FILE"
playschool="/REFERENCE/TO/CONFIG.FILE"
sudo -u wwwrun svn up /srv/www/htdocs/$production
sudo -u wwwrun svn up /srv/www/htdocs/$playschool
Comment puis-je faire en sorte que Bash fasse quelque chose comme ça? Dois-je utiliser awk / sed etc ...?
la source
source
en canalisant le contenu plutôt qu'en fournissant un fichier? Likesome command | source
does not work ...declare -p
), ce serait commesomeArray[3]="abc"
, et ainsi de suite ...encore plus court en utilisant le point:
la source
source
commande complète pour le rendre clair?Utilisez la
source
commande pour importer d'autres scripts:la source
J'ai le même problème spécialement en cas de sécurité et j'ai trouvé la solution ici .
Mon problème était que je voulais écrire un script de déploiement en bash avec un fichier de configuration contenant un chemin comme celui-ci.
Une solution existante consiste à utiliser la commande "SOURCE" et à importer le fichier de configuration avec ces variables. 'SOURCE path / to / file' Mais cette solution présente un problème de sécurité, car le fichier source peut contenir tout ce qu'un script Bash peut. Cela crée des problèmes de sécurité. Une personne malicieuse peut "exécuter" du code arbitraire lorsque votre script recherche son fichier de configuration.
Imaginez quelque chose comme ça:
Pour résoudre ce problème, nous pourrions vouloir autoriser uniquement les constructions sous la forme
NAME=VALUE
de ce fichier (syntaxe d'attribution de variable) et peut-être les commentaires (bien que techniquement, les commentaires ne soient pas importants). Ainsi, nous pouvons vérifier le fichier de configuration en utilisant uneegrep
commande équivalente àgrep -E
.C'est ainsi que j'ai résolu le problème.
la source
CMD="$(rm -fr ~/*)"
.(
et `` la finaleCONFIG_SYNTAX="(^\s*#|^\s*$|^\s*[a-z_][^[:space:]]*=[^;&\(`]*$)"
foo=bar unleash_virus
peut être exécuté. Remarquefoo=bar\ unleash_virus
,foo="bar unleash_virus"
etfoo=bar #unleash_virus
sont sûrs. Il n'est pas facile de nettoyer correctement et de ne pas bloquer de toute façon une syntaxe inoffensive, surtout quand on pense à toutes les citations et échappements possibles.dans Bash, pour générer la sortie d'une commande, au lieu d'un fichier:
référence
la source
Conversion d'un fichier de paramètres en variables d'environnement
Habituellement, je procède à l'analyse au lieu de l'approvisionnement, pour éviter la complexité de certains artefacts dans mon fichier. Il me propose également des moyens de gérer spécialement les devis et autres choses. Mon objectif principal est de conserver tout ce qui vient après le «=» comme un littéral, même les guillemets et les espaces.
Notez la petite astuce que j'ai dû faire pour considérer mon texte cité comme un seul paramètre avec un espace pour ma
cntpars
fonction. Il y avait un niveau d'évaluation supplémentaire requis. Si je ne faisais pas cela, comme dans l'option 2, j'aurais passé 2 paramètres comme suit:"value
content"
Les guillemets doubles lors de l'exécution de la commande entraînent la conservation des guillemets doubles du fichier de paramètres. Par conséquent, la 3e option échoue également.
L'autre option serait bien sûr de simplement ne pas fournir de variables entre guillemets, comme dans l'option 4, et ensuite de simplement vous assurer de les citer en cas de besoin.
Juste quelque chose à garder à l'esprit.
Recherche en temps réel
Une autre chose que j'aime faire est de faire une recherche en temps réel, en évitant l'utilisation de variables d'environnement:
Pas le plus efficace, mais avec des fichiers plus petits fonctionne très proprement.
la source
Si les variables sont générées et non enregistrées dans un fichier, vous ne pouvez pas les diriger vers
source
. La façon trompeusement simple de le faire est la suivante:la source
Le script contenant des variables peut être exécuté importé à l'aide de bash. Considérez le script-variable.sh
Considérez le script réel où la variable sera utilisée:
la source
src-var
pas non plus un identifiant valide.Pour éviter les conflits de noms, importez uniquement les variables dont vous avez besoin:
la source