exportar $ algumVariable = valor
Os arquivos estão disponíveis em todos os terminais após a fonte; Para esse fim, as variáveis ambientais são armazenadas dentro de arquivos Bash.
Suponha que o usuário precise usar ou alterar variáveis ambientais com a ajuda do comando sed. Nesse caso, os usuários não podem usar o comando como mencionado acima. Diferentes funções e métodos devem ser usados para o comando sed. Neste artigo, veremos alguns métodos desses, que são os seguintes.
Na linha de comando Linux, o Sed é uma ferramenta de processamento potente. Usando as frases de um sed compactas, os usuários geralmente fazem substituição de texto, o que é bastante conveniente. Quando os usuários substituem sed por variáveis de concha, ele também tem algumas desvantagens.
Como usar variáveis de ambiente no comando sed
Vamos ter um exemplo, aqui temos um arquivo chamado teste.TXT.
teste de gato.TXT
Current_time = # preencha o
Data e hora atuais
Java_home = # preencha o
Java_home Path
Escreveremos um script de shell para preencher o caminho java_home e o horário atual no sistema atual acima, dado. Este processo é fácil, mas há alguns problemas que são possíveis. Aqui vamos escrever um script usando GNU sed.
Como mencionamos acima, aqui, substituiremos o caminho Java_Home e o horário atual. Para isso, primeiro preencheremos o horário atual nos lugares certos aqui. Podemos usar o comando de data para obter a hora atual.
solução de gato.sh
#!/bin/sh
My_date = $ (data)
sed -i -r 's/^(current_time =).*/\ 1 $ my_date/'teste.TXT
O script escrito acima não é muito difícil de entender. Ao substituir o comando primeiro em uma variável my_date, obtenha o tempo e a data atual e salve -o.
Depois de obter os dados usando a substituição sed, o usuário os preenche no arquivo. Usamos a opção -i do comando gnu sed para executar a edição no local.
Agora vamos verificar e executar nosso script.
$ ./solução.sh
$ Teste CAT.TXT
Current_time = $ my_date
Java_home = # preencha o caminho java_home
Vemos na saída que a linha com "current_time =" foi substituída. No entanto, o literal "$ my_date" é preenchido em vez do tempo e data atual.
A razão pela qual as variáveis de shell não são expandidas em citações únicas é que usamos citações únicas sob o comando sed.
As aspas duplas são usadas no comando sed para permitir a expansão da variável de shell de correção rápida.
$ CAT Solução.sh
#!/bin/sh
My_date = $ (data)
sed -i -r "s/^(current_time =).*/\ 1 $ my_date/"teste.TXT
Agora vamos testar a solução.SH Script novamente.
$ ./solução.sh
$ Teste CAT.TXT
Current_time = quarta -feira, 27 de janeiro, 22:02:05 CET 2021
Java_home = # preencha o caminho java_home
Depois de preencher a hora e a data nos lugares certos, o caminho java_home é preenchido.
Vemos qual delimitador devemos usar adicionando outro comando sed à nossa solução.script sh.
$ CAT Solução.sh
..
sed -i -r "s/^(current_time =).*/\ 1 $ my_date/"teste.TXT
sed -i -r "s/^(java_home =).*/\ 1 $ java_home/"teste.TXT
Verificando o script acima.
$ ./solução.sh
sed: -e expressão nº 1, char 24: opção desconhecida para 's'
Vemos que o novo comando sed que foi adicionado não está funcionando. Se testá -lo pela segunda vez, vemos que apenas sua variável é diferente, mas funcionar é o mesmo que o comando sed. Para resolver isso, devemos tomar as seguintes medidas:
O delimitador não existe na variável
Para saber isso bem, os usuários devem primeiro entender o que a variável de ambiente $ java_home contém.
$ echo $ java_home
/usr/lib/jvm/padrão
Podemos ver essas variáveis de shell são expandidas dentro de duas quartas. Portanto, nosso segundo comando sed vem após expansão variável.
sed -i -r "s/^(java_home =).*/\ 1/usr/lib/jvm/default/"teste.TXT
As barras (/) no valor da variável interferem no comando 'S' (S/Padrão/Substituição/), e é por isso que o comando sed acima não funciona. Dessa forma, podemos selecionar outros personagens como delimitadores do comando 's'.
Os usuários podem modificar ligeiramente o segundo comando sed para resolver isso usando '#' como o delimitador do comando s.
sed -i -r "s#^(java_home =).*#\ 1 $ java_home#"teste.TXT
Agora testamos o script acima.
$ ./solução.sh
$ Teste CAT.TXT
Current_time = quarta -feira, 27 de janeiro, 22:36:57 CET 2021
Java_home =/usr/lib/jvm/padrão
Solução 2
solução.SH funciona na maioria dos casos. Além disso, vemos que '#' em nomes de arquivo é um caractere válido na maioria dos sistemas de arquivos *nix. Se executarmos nosso script em java_home em um sistema definido como /opt /#jvm#, o script do usuário falha novamente. Faremos o seguinte trabalho para que nosso script funcione em todos os casos
Os usuários podem usar a substituição do Bash para escapar do delimitador. Por exemplo, o usuário pode escapar de todos os caracteres '#' na variável $ var.
$ Var = "foo#bar#blah"
$ echo "$ var //#/\\#"
foo \ #bar \ #blah
Agora vamos aplicar nosso script aqui.
$ CAT Solução.sh
#!/bin/sh
My_date = $ (data)
sed -i -r "s/^(current_time =).*/\ 1 $ my_date/"teste.TXT
sed -i -r "s#^(java_home =).*#\ 1 $ java_home //#/\\##"teste.TXT
Testaremos executando nosso script com a variável espúria Java_home para ver se funciona como esperado.
$ Java_home =/opt/#/:/@/-/_/$/jvm ./solução.sh
$ Teste CAT.TXT
Current_time = qui 28 de janeiro 11:23:07 CET 2021
Java_home =/opt/#/:/@/-/_/$/jvm
Concluímos que nosso script funciona, embora tenhamos muitos personagens especiais em nossa variável java_home.
Conclusão
Neste artigo, vimos como usar variáveis ambientais com o comando sed. Eles também cometem muitos erros que causam, que também mencionamos neste artigo e sua reparação. Esperamos que, neste artigo, você obtenha o conhecimento completo de que precisa.