Quero inserir no meu script um valor (string) que eu leria de um arquivo de texto.
Por exemplo, em vez de:
echo "Enter your name"
read name
Quero ler uma string de outro arquivo de texto para que o intérprete leia a string do arquivo e não da entrada do usuário.
KEY=VALUE
pares? As soluções são bastante diferentes (se ele é o último, a resposta de Takkat aplica, o ex-Radu de)Respostas:
Para ler variáveis de um arquivo, podemos usar o comando
source
ou.
.Vamos supor que o arquivo contenha a seguinte linha
podemos importar essa variável usando
fonte
<filename>
será executado em seu shell, comorm -rf /
, o que pode ser muito perigoso.sed
para adicionarlocal
palavras-chave e tornar o script um pouco mais seguro e não poluir seu escopo global. Então, dentro de uma função, façacat global_variables.sh | sed -e 's/^/local /' > local_variables.sh
e use. ./local_variables.sh
. O que você importar na função estará disponível apenas nessa função. Observe que ele assumeglobal_variables.sh
apenas uma variável por linha.Considerando que você deseja que todo o conteúdo do seu arquivo de texto seja mantido em sua variável, você pode usar:
Ou, em pura festa:
fonte
echo $name
. Eu uso apenas para teste. Em seguida, você pode usar a$name
variável para processamento adicional em qualquer lugar que desejar no seu script.$name
variável é a sequência do seu arquivo atribuída usando ocat $file
comando O que não é claro ou tão difícil de entender?$file
variável se você estiver usando apenas uma vez para carregar o$name
variável, basta usarcat /path/to/file
De dentro do seu script, você pode fazer isso:
Você pode fazer isso várias vezes, por exemplo, em um loop
fonte
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
)e o arquivo de entrada (chamado
input.in
)você pode executar isso no terminal de uma das seguintes maneiras:
e seria equivalente a apenas executar o script e inserir os dados manualmente - seria impressa a linha "Olá Tomas. Você tem 26 anos, certo?".
Como Radu Rădeanu tem já foi sugerido , você pode usar
cat
dentro do seu script para ler o conteúdo de um arquivo em um avariable - nesse caso, você precisa de cada arquivo para conter apenas uma linha, com apenas o valor que deseja para essa variável específica. No exemplo acima, você poderia dividir o arquivo de entrada em um com o nome (por exemplo,name.in
) e um com a idade (por exemplo,age.in
), e mudar oread name
eread age
linhas paraname=$(cat name.in)
eage=$(cat age.in)
respectivamente.fonte
vh=$(awk "NR==3 {print;exit}" /var/www/test.txt)
. Você terá a string salva na variável$vh
e poderá usá-la da seguinte maneira:mkdir "/var/www/$vh"
- isso criará uma pasta com o nome especificado dentro de / var / www.Encontrei solução de trabalho aqui: https://af-design.com/2009/07/07/loading-data-into-bash-variables/
fonte
De
man bash:1785
, essa substituição de comando é equivalente,name=$(cat "$file")
mas mais rápida.fonte
Resposta curta:
fonte
Se você quiser usar várias strings, poderá:
OU
Se você deseja que o usuário indique o arquivo
fonte
fonte
Eu uso isso para obter uma única variável de um arquivo
Quando
GET_VAR
não for encontrado${FILE}
, ficará em branco em vez de causar um erro, graças ao|| true
.Ele usa o
grep -P
que está no GNU grep, mas não o padrão em todo o grep no momento em que foi escrito.fonte