3 votes

Lire la chaîne avec la variable $USER comme texte et la résoudre

J'ai quelques fichiers de configuration. Le fichier de configuration contient une chaîne de caractères : LocalPath /media/$USER

Je lis le fichier de configuration dans bash-script :

while read var value
do
    export "$var"="$value"
done < my-conf-file.conf

Donc, je peux utiliser $LocalPath dans bash-script. C'est égal : /media/$USER mais je veux avoir : /media/user1 (user1 est mon utilisateur).

Comment puis-je le mettre en œuvre ?

9voto

pLumo Points 23269

read ne développe pas les variables de votre fichier de configuration.

Vous pouvez le vérifier :

$ read username
$USER
$ echo $username
$USER

Cette réponse sur Stackoverflow donne une solution.
Changez votre script en ceci pour qu'il développe les variables :

while read var value
do
    export "$var"="$value"
done < <(envsubst < my-conf-file.conf)

1voto

wjandrea Points 13147

Comme Kyle Strand l'a suggéré dans un commentaire la solution la plus simple est de faire du fichier de configuration un script de Bash :

export LocalPath=/media/$USER

Ensuite, vous le sourcez à partir de votre script principal :

source my-conf-file.sh

Ou si vous avez un tas de variables, et que vous ne voulez pas taper export pour chacun d'eux, faites le fichier de configuration comme ceci :

set -a
LocalPath=/media/$USER
set +a

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X