Comment lire une variable d'un fichier?

46

Je souhaite insérer dans mon script une valeur (chaîne) que je lirais dans un fichier texte.

Par exemple, au lieu de:

echo "Enter your name"
read name

Je veux lire une chaîne d’un autre fichier texte pour que l’interprète puisse lire la chaîne du fichier et non celle de l’utilisateur.

    
posée user208413 28.10.2013 - 09:35
la source

7 réponses

73

Pour lire les variables d'un fichier, nous pouvons utiliser la commande source ou l'opérateur .

Suppose que le fichier contient la ligne suivante

MYVARIABLE="Any string"

nous pouvons alors importer cette variable en utilisant

#!/bin/bash

source <filename>
echo $MYVARIABLE
    
réponse donnée Takkat 28.10.2013 - 10:44
la source
42

Étant donné que vous souhaitez conserver tout le contenu de votre fichier texte dans votre variable, vous pouvez utiliser:

#!/bin/bash

file="/path/to/filename" #the file where you keep your string name

name=$(cat "$file")        #the output of 'cat $file' is assigned to the $name variable

echo $name               #test

Ou, en pure bash:

#!/bin/bash

file="/path/to/filename"     #the file where you keep your string name

read -d $'\x04' name < "$file" #the content of $file is redirected to stdin from where it is read out into the $name variable

echo $name                   #test
    
réponse donnée Radu Rădeanu 28.10.2013 - 09:44
la source
9

Dans votre script, vous pouvez le faire:

read name < file_containing _the_answer

Vous pouvez même le faire plusieurs fois, par ex. en boucle

while read LINE; do echo "$LINE"; done < file_containing_multiple_lines
    
réponse donnée thom 28.10.2013 - 23:35
la source
6

Une autre manière de procéder consiste à rediriger l’entrée standard vers votre fichier, où vous avez toutes les entrées utilisateur dans l’ordre attendu par le programme. Par exemple, avec le programme (appelé script.sh )

#!/bin/bash
echo "Enter your name:"
read name
echo "...and now your age:"
read age

# example of how to use the values now stored in variables $name and $age
echo "Hello $name. You're $age years old, right?"

et le fichier d'entrée (appelé input.in )

Tomas
26

vous pouvez l'exécuter du terminal de l'une des deux manières suivantes:

$ cat input.in | ./script.sh
$ ./script.sh < input.in

et cela équivaudrait à simplement exécuter le script et à entrer les données manuellement - cela imprimerait la ligne "Hello Tomas. Vous avez 26 ans, non?".

Comme Radu Rădeanu a déjà suggéré , vous pouvez utiliser cat dans votre script pour lire le contenu d'un fichier dans une variable - dans ce cas, vous avez besoin que chaque fichier contienne une seule ligne, avec seulement la valeur souhaitée pour cette variable spécifique. Dans l'exemple ci-dessus, vous divisez le fichier d'entrée en un avec le nom (par exemple, name.in ) et un avec l'âge (par exemple, age.in ) et remplacez les lignes read name et read age par name=$(cat name.in) et age=$(cat age.in) respectivement.

    
réponse donnée Tomas Lycken 28.10.2013 - 10:57
la source
2

Réponse courte:

name='cat "$file"'
    
réponse donnée nedim 17.09.2015 - 16:53
la source
2

J'ai trouvé une solution de travail ici: lien

if [ -f $SETTINGS_FILE ];then
    . $SETTINGS_FILE
fi
    
réponse donnée Lukasz 24.01.2016 - 16:33
la source
0

Si vous souhaitez utiliser plusieurs chaînes, vous pouvez utiliser:

path="/foo/bar";
for p in 'cat "$path"';
do echo "$p" ....... (here you would pipe it where you need it) 

OU

Si vous souhaitez que l’utilisateur indique le fichier

read -e "Specify path to variable(s): " path;
for p in 'cat "$path"';
do echo "$p" ............................
    
réponse donnée George 10.06.2015 - 18:47
la source

Lire d'autres questions sur les étiquettes