Como leio uma variável de um arquivo?

44

Eu quero inserir no meu script um valor (string) que eu iria ler de um arquivo de texto.

Por exemplo, em vez de:

echo "Enter your name"
read name

Eu quero ler uma string de outro arquivo de texto para que o interpretador leia a string do arquivo e não a entrada do usuário.

    
por user208413 28.10.2013 / 09:35

7 respostas

67

Para ler variáveis de um arquivo, podemos usar o comando source ou . operator

Vamos supor que o arquivo contenha a seguinte linha

MYVARIABLE="Any string"

podemos então importar esta variável usando

#!/bin/bash

source <filename>
echo $MYVARIABLE
    
por Takkat 28.10.2013 / 10:44
41

Considerando que você quer que todo o conteúdo do seu arquivo de texto seja mantido em sua variável, você pode usar:

#!/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, em pura 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
    
por Radu Rădeanu 28.10.2013 / 09:44
9

De dentro do seu script, você pode fazer isso:

read name < file_containing _the_answer

Você pode até fazer isso várias vezes. em um loop

while read LINE; do echo "$LINE"; done < file_containing_multiple_lines
    
por thom 28.10.2013 / 23:35
6

Uma maneira alternativa de fazer isso seria apenas redirecionar a entrada padrão para o seu arquivo, onde você tem toda a entrada do usuário na ordem esperada pelo programa. Por exemplo, com o programa (chamado 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?"

e o arquivo de entrada (chamado input.in )

Tomas
26

você pode executar isso a partir do terminal de uma das duas maneiras a seguir:

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

e seria equivalente a apenas executar o script e inserir os dados manualmente - ele imprimiria a linha "Hello Tomas. Você tem 26 anos, certo?".

Como Radu Rădeanu tem já sugerido , você poderia usar cat dentro do seu script para ler o conteúdo de um arquivo em uma variável - nesse caso, você precisa que cada arquivo contenha apenas uma linha, com apenas o valor que você quer para essa variável específica. No exemplo acima, você dividiria o arquivo de entrada em um com o nome (digamos, name.in ) e outro com a idade (digamos, age.in ), e alteraria as linhas read name e read age para name=$(cat name.in) e age=$(cat age.in) respectivamente.

    
por Tomas Lycken 28.10.2013 / 10:57
2

Resposta curta:

name='cat "$file"'
    
por nedim 17.09.2015 / 16:53
2

Encontrei a solução de trabalho aqui: link

if [ -f $SETTINGS_FILE ];then
    . $SETTINGS_FILE
fi
    
por Lukasz 24.01.2016 / 16:33
0

Se você quiser usar várias strings, você pode:

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

OR

Se você quiser que o usuário indique o arquivo

read -e "Specify path to variable(s): " path;
for p in 'cat "$path"';
do echo "$p" ............................
    
por George 10.06.2015 / 18:47

Tags