- Gerar link
- X
- Outros aplicativos
Postagem em destaque
- Gerar link
- X
- Outros aplicativos
Um arquivo de configuração é onde podemos guardar informações que podem ser facilmente alteradas sem a necessidade de recompilação de nosso script, ou seja, basta alterarmos esse arquivo e reiniciar o script que as alterações serão aplicadas. Em alguns casos os arquivos são gerados previamente sem intervenção do usuário. E quando precisamos gerar configurações personalizadas com base nas informações fornecidas pelo próprio usuário ? E se essas informações precisam ser inseridas durante a execução do Script ? Como devo proceder ?
Existem alguma formas de resolver esses problemas, porém existe uma que merece ser mencionada. O comando cat !! Com ele poderemos criar e gerar essas configurações personalizadas a nível de execução.
EOF pode ser qualquer expressão definida pelo usuário.
Vou criar um arquivo com algumas variáveis de ambiente utilizadas pelo nosso hipotético script.
Note que ao digitar a primeira linha de comando, o shell exibe um prompt de inserção que aguarda os dados a serem inseridos pelo usuário.
Visualizando arquivo de configuração
Entendendo a execução:
Essa foi a forma mais simples de se criar um arquivo de configuração com informações estáticas.
Em alguns casos precisamos anexar novas informações no arquivo sem sobrescreve-lo e nem alterar os dados já existentes. Para isso precisamos utilizar o caractere de redirecionamento duas vezes '>>' ao invés de uma '>'. Vamos aproveitar o arquivo criado anteriormente para anexar as novas informações.
Visualizando o arquivo.
Muitas aplicações utilizam scripts em suas instalações para determinar configurações cruciais para o funcionando dos seus serviços e essas informações são requeridas durante ou após instalação. O script fornece uma interface de interação com o usuário, seja ela gráfica ou não para captura dos dados que são organizados e gravados no arquivo de configuração.
Criei um pequeno script que demonstra essa aplicação.
Script: conf.sh
Testando...
Em alguns casos, o script pode utilizar uma variável de ambiente existente armazenada em seu arquivo de configuração para execução de determinadas tarefas. Ele necessita especificamente da nomenclatura da variável e não o seu valor.
Para gravar o nome literal de uma variável sem que ela seja interpretada e seu valor convertido, precisamos criar uma forma de escape. Devemos utilizar a '\' (contra-barra) antes nomenclatura.
Exemplo: \$var
Gerando arquivo de configuração sem interpretar o valor da variável $PATH.
Visualizando arquivo.
A importância nesses casos de usar a nomenclatura e não o valor; é que criamos uma espécie de ponteiro de acesso direto a variável, ou seja, independente do valor que ela venha receber, não haverá necessidade de alterar o arquivo de configuração ao contrário do valor previamente interpretado e armazenado.
Agora imagine que você precise gerar um arquivo com centenas de linhas e cada linha com uma variável que precisa ser escapada. Já pensou inserir a '\' em todas elas ? Claro que não haverá necessidade, pois tenho um macete salvador de vidas. Insira a '\' (contra-barra) antes do EOF (expressão chave).
Exemplo: cat > arquivo << \EOF
Testando...
Visualizando arquivo.
A expressão chave é uma sequência de caracteres que informa ao comando cat o final do arquivo. Uma vez que a linha é lida e a expressão encontrada, imediatamente é finalizada a gravação no arquivo e o comando encerrado. A nomenclatura EOF que significa (End Of File) é utilizada apenas para seguir um padrão, ficando a critério do usuário escolher sua própria expressão se assim desejar.
Exemplo: cat > arquivo << FIM
Testando...
Visualizando arquivo.
Caso queira utilizar uma expressão composta, não esqueça de colocá-la entre aspas simples (') ou duplas (").
Exemplo: cat > arquivo << 'ESTE É O FIM'
Outro detalhe importante é com a indentação do código. A expressão chave no final da estrutura deve ficar alinhada a margem esquerda, enquanto os demais podem seguir a indentação. Mas cuidado, qualquer espaço na estrutura será refletido no arquivo.
Testando...
Visualizando arquivo.
Errado
Para finalizar vou explicar porque optei pelo comando cat e não outros como: echo, tee e etc. Apesar de funcionarem, o cat apresenta uma clareza em sua estrutura, permitindo melhor visibilidade no código e uma dinâmica de controle maior.
Abaixo estão 2 códigos que exercem a mesma função, que é criar um arquivo de configuração. Me diga qual deles é mais fácil de entender.
Com echo
Com cat
Em relação ao tee, posso dizer que ele é ótimo quando precisamos criar vários arquivos a partir de uma matriz.
Espero ter esclarecido as suas dúvidas na implementação do cat na criação de arquivos de configuração. Mas qualquer dúvida é só gritar !! 😆😃
Deixe seu comentário, participe dando suas sugestões. Um grande abraço e até a próxima. Vlw !!!
Existem alguma formas de resolver esses problemas, porém existe uma que merece ser mencionada. O comando cat !! Com ele poderemos criar e gerar essas configurações personalizadas a nível de execução.
Sintaxe
cat > ARQUIVO << EOF
...
...
EOF
...
...
EOF
Parâmetro | Descrição |
---|---|
EOF | Expressão chave que delimita o final do arquivo |
1. Criando arquivo de configuração.
Vou criar um arquivo com algumas variáveis de ambiente utilizadas pelo nosso hipotético script.
$ cat > test.conf << EOF
> DIR=/opt
> USUARIO=shaman
> DIR_EXEC=/usr/bin
> EOF
Utilizando o redirecionador ‘>’ faz com que o comando cat sobrescreva o arquivo test.conf se ele existir. > DIR=/opt
> USUARIO=shaman
> DIR_EXEC=/usr/bin
> EOF
Note que ao digitar a primeira linha de comando, o shell exibe um prompt de inserção que aguarda os dados a serem inseridos pelo usuário.
Visualizando arquivo de configuração
$ cat test.conf
DIR=/opt
USUARIO=shaman
DIR_EXEC=/usr/Bin
O arquivo foi criado e as informações armazenadas com sucesso, mantendo os padrões de formatação como se estivesse editando o arquivo com um editor de texto.DIR=/opt
USUARIO=shaman
DIR_EXEC=/usr/Bin
Entendendo a execução:
Descrição de execução do comando cat. |
2. Anexando informações em um arquivo já existente.
Em alguns casos precisamos anexar novas informações no arquivo sem sobrescreve-lo e nem alterar os dados já existentes. Para isso precisamos utilizar o caractere de redirecionamento duas vezes '>>' ao invés de uma '>'. Vamos aproveitar o arquivo criado anteriormente para anexar as novas informações.
$ cat >> test.conf << EOF
> MEU_HOME=/home/shaman
> MEU_BASH=/sbin
> EOF
Utilizando os redirecionadores '>>', faz o comando cat anexe os novos dados no final do arquivo, mantendo os dados já existentes.> MEU_HOME=/home/shaman
> MEU_BASH=/sbin
> EOF
Visualizando o arquivo.
$ cat test.conf
DIR=/opt
USUARIO=shaman
DIR_EXEC=/usr/Bin
MEU_HOME=/home/shaman
MEU_BASH=/sbin
DIR=/opt
USUARIO=shaman
DIR_EXEC=/usr/Bin
MEU_HOME=/home/shaman
MEU_BASH=/sbin
3. Gerando configurações dinâmicas.
Muitas aplicações utilizam scripts em suas instalações para determinar configurações cruciais para o funcionando dos seus serviços e essas informações são requeridas durante ou após instalação. O script fornece uma interface de interação com o usuário, seja ela gráfica ou não para captura dos dados que são organizados e gravados no arquivo de configuração.
Criei um pequeno script que demonstra essa aplicação.
Script: conf.sh
#!/bin/bash # Host de destino read -p 'HOST: ' HOST # Porta de conexão read -p 'PORTA: ' PORTA # Protocolo de conexão read -p 'PROTOCOLO: ' PROTOCOLO # Cria o arquivo e salva os dados armazenados nas variáveis. cat > ini.conf << EOF HOST=$HOST PORT=$PORTA PROTOCOL=$PROTOCOLO EOF # Finaliza o prompt de entrada de dados echo ------------- # Cabeçalho echo 'Arquivo: ini.conf' echo 'Visualizando conteúdo...' # Lista o conteúdo do arquivo criado 'ini.conf' cat ini.conf #FIM
Testando...
$ ./conf.sh
HOST: servidor.dominio
PORTA: 22
PROTOCOLO: TCP
-------------
Arquivo: ini.conf
Visualizando conteúdo...
HOST=servidor.dominio
PORT=22
PROTOCOL=TCP
O Script armazenou os dados capturados pelo comando read e armazenou nas variáveis HOST, PORTA e PROTOCOLO, depois os valores foram interpretados na estrutura do comando cat onde as variáveis for emitidas.HOST: servidor.dominio
PORTA: 22
PROTOCOLO: TCP
-------------
Arquivo: ini.conf
Visualizando conteúdo...
HOST=servidor.dominio
PORT=22
PROTOCOL=TCP
4. Gerando configurações utilizando nomes literais de variáveis.
Em alguns casos, o script pode utilizar uma variável de ambiente existente armazenada em seu arquivo de configuração para execução de determinadas tarefas. Ele necessita especificamente da nomenclatura da variável e não o seu valor.
Para gravar o nome literal de uma variável sem que ela seja interpretada e seu valor convertido, precisamos criar uma forma de escape. Devemos utilizar a '\' (contra-barra) antes nomenclatura.
Exemplo: \$var
Gerando arquivo de configuração sem interpretar o valor da variável $PATH.
$ cat > init.conf << EOF
> PATH=\$PATH:/home/shaman/.bin
> EOF
O caractere '\' (contra-barra) impede que o shell interprete a variável.> PATH=\$PATH:/home/shaman/.bin
> EOF
Visualizando arquivo.
$ cat init.conf
PATH=$PATH:/home/shaman/.bin
PATH=$PATH:/home/shaman/.bin
A importância nesses casos de usar a nomenclatura e não o valor; é que criamos uma espécie de ponteiro de acesso direto a variável, ou seja, independente do valor que ela venha receber, não haverá necessidade de alterar o arquivo de configuração ao contrário do valor previamente interpretado e armazenado.
Agora imagine que você precise gerar um arquivo com centenas de linhas e cada linha com uma variável que precisa ser escapada. Já pensou inserir a '\' em todas elas ? Claro que não haverá necessidade, pois tenho um macete salvador de vidas. Insira a '\' (contra-barra) antes do EOF (expressão chave).
Exemplo: cat > arquivo << \EOF
Testando...
$ cat > teste.conf << \EOF
> VAR1=$BASH
> VAR2=$DISPLAY
> VAR3=$XDG_CURRENT_DESKTOP
> VAR4=$XAUTHORITY
> VAR5=$LANGUAGE
> EOF
> VAR1=$BASH
> VAR2=$DISPLAY
> VAR3=$XDG_CURRENT_DESKTOP
> VAR4=$XAUTHORITY
> VAR5=$LANGUAGE
> EOF
Visualizando arquivo.
$ cat teste.conf
VAR1=$BASH
VAR2=$DISPLAY
VAR3=$XDG_CURRENT_DESKTOP
VAR4=$XAUTHORITY
VAR5=$LANGUAGE
VAR1=$BASH
VAR2=$DISPLAY
VAR3=$XDG_CURRENT_DESKTOP
VAR4=$XAUTHORITY
VAR5=$LANGUAGE
Expressão chave (EOF)
A expressão chave é uma sequência de caracteres que informa ao comando cat o final do arquivo. Uma vez que a linha é lida e a expressão encontrada, imediatamente é finalizada a gravação no arquivo e o comando encerrado. A nomenclatura EOF que significa (End Of File) é utilizada apenas para seguir um padrão, ficando a critério do usuário escolher sua própria expressão se assim desejar.
Exemplo: cat > arquivo << FIM
Testando...
$ cat > test.conf << FIM
> HOST=server.dominio
> PORT=22
> FIM
> HOST=server.dominio
> PORT=22
> FIM
Visualizando arquivo.
$ cat test.conf
HOST=server.dominio
PORT=22
HOST=server.dominio
PORT=22
Caso queira utilizar uma expressão composta, não esqueça de colocá-la entre aspas simples (') ou duplas (").
Exemplo: cat > arquivo << 'ESTE É O FIM'
Outro detalhe importante é com a indentação do código. A expressão chave no final da estrutura deve ficar alinhada a margem esquerda, enquanto os demais podem seguir a indentação. Mas cuidado, qualquer espaço na estrutura será refletido no arquivo.
Testando...
#!/bin/bash
...
cat > test.conf << EOF
HOME=/home/shaman
EOF
...
...
cat > test.conf << EOF
HOME=/home/shaman
EOF
...
Visualizando arquivo.
$ cat test.conf
HOME=/home/shaman
HOME=/home/shaman
Errado
#!/bin/bash
...
cat > test.conf << EOF
HOME=/home/shaman
EOF # ERRO
... < -
... < -| cat
... < -
Se estiver dentro de um script, irá interpretar como se todo o resto do código abaixo fizesse parte da estrutura do cat....
cat > test.conf << EOF
HOME=/home/shaman
EOF # ERRO
... < -
... < -| cat
... < -
Para finalizar vou explicar porque optei pelo comando cat e não outros como: echo, tee e etc. Apesar de funcionarem, o cat apresenta uma clareza em sua estrutura, permitindo melhor visibilidade no código e uma dinâmica de controle maior.
Abaixo estão 2 códigos que exercem a mesma função, que é criar um arquivo de configuração. Me diga qual deles é mais fácil de entender.
Com echo
$ echo -e 'VAR1=$BASH\nVAR2=$DISPLAY\nVAR3=XDG_CURRENT_DESKTOP\nVAR4=$XAUTHORITY\nVAR5=$LANGUAGE' > test.conf
Com cat
$ cat > teste.conf << \EOF
> VAR1=$BASH
> VAR2=$DISPLAY
> VAR3=$XDG_CURRENT_DESKTOP
> VAR4=$XAUTHORITY
> VAR5=$LANGUAGE
> EOF
Nâo resta dúvidas não é mesmo ?!!!> VAR1=$BASH
> VAR2=$DISPLAY
> VAR3=$XDG_CURRENT_DESKTOP
> VAR4=$XAUTHORITY
> VAR5=$LANGUAGE
> EOF
Em relação ao tee, posso dizer que ele é ótimo quando precisamos criar vários arquivos a partir de uma matriz.
cat teste.conf | tee arq1.conf arq2.conf arq3.conf ...
Espero ter esclarecido as suas dúvidas na implementação do cat na criação de arquivos de configuração. Mas qualquer dúvida é só gritar !! 😆😃
Deixe seu comentário, participe dando suas sugestões. Um grande abraço e até a próxima. Vlw !!!
Comentários
Postar um comentário