shell-script-pt
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [shell-script-pt] Configurando e testando variáveis


From: Julio C. Neves
Subject: Re: [shell-script-pt] Configurando e testando variáveis
Date: Thu, 23 Jul 2020 10:28:34 -0300

Fala Jamenson, bom dia.
te confesso que qdo li o seu 1o. email não entendi bem a sua dúvida, mas tb me lembro que a 1ª linha do script era de um shebang para obrigar a execução via source, o que não criaria um subshell. Me lembro disso, pq havia menos de 3 meses havia incluído um tópico sobre isso na 12ª edição do meu livro (que creio não será publicada) e ela talvez seja o que vc procura. Vou postar o texto abaixo, que isso pode ser que te ajude.

Como o comando source não chamará um interpretador para executar as linhas do arquivo, o shebang (que normalmente é um #!/bin/bash, mas não necessariamente isso) não será visto como um interpretador, mas como um comando comum - não esqueça que sua função é indicar o interpretador que atuará sobre o arquivo - não importando o que estiver ali.

Uma vez entendido isso, vamos supor que você tenha um programa que só pode ser executado via source, então podemos alertar o usuário de uma forma bacana e muito rara de se ver usando somente o shebang, olha só:

$ cat testa.source
#!/bin/echo Para "executar" esse arquivo, use: $ source
echo Cheguei nesta linha

Caso eu execute este programa, o seu nome será incluído no final da mensagem do comando echo, veja:

$ ./testa.source
Para "executar" esse arquivo, use: $ source ./testa.source

Repare que na sua execução ela não chegou à segunda linha, pois não deu a mensagem correspondente, porém executando com o source, vem:

$ source ./testa.source
Cheguei nesta linha


Como esse trecho ainda não foi lido nem testado por ninguém e a literatura sobre o tema é muito escassa, agradeço críticas e comentários dos colegas.

Abraços,
Julio

» Não tem tempo para fazer um curso presencial?
» Na sua cidade não tem nenhum bom curso de Linux?
Somente nesta semana de 10-17/08, as inscrições estarão
abertas para uma nova turma. Veja mais detalhes em:

Também damos treinamento em sua empresa
em qualquer cidadecom certificado e nota fiscal.







Em qui., 23 de jul. de 2020 às 00:20, Jamenson Ferreira Espindula de Almeida Melo <jafesp@gmail.com> escreveu:
Em qua., 22 de jul. de 2020 às 18:47, Fábio Assis <appbcg@gmail.com> escreveu:
>
> você já tentou sem assim:
> #!/bin/bash
> if env test -n "${RCLONE_CONFIG_PASS}";
> then
> echo "OK"
> else
> echo "Senha, por favor ..."
> read -s RCLONE_CONFIG_PASS
> export RCLONE_CONFIG_PASS
> fi
>
>
>
> Em sáb., 18 de jul. de 2020 às 18:24, Jamenson Ferreira Espindula de Almeida Melo <jafesp@gmail.com> escreveu:
>>
>> Em qua., 15 de jul. de 2020 às 01:36, Alfredo Casanova
>> <atcasanova@gmail.com> escreveu:
>> >
>> > Você está executando esse script na crontab?
>>
>> Obrigado por responder, Alfredo Casanova. Não estou executando o
>> script na crontab. Estou executando manualmente para fins de teste.
>> >
>> > Faça um teste, mande o resultado do comando "env" por dentro do script pra um arquivo temporário e compare a saída com o mesmo comando no shell interativo
>>
>> Seria eu incluir uma linha do tipo <echo $RCLONE_CONFIG_PASS >
>> /tmp/teste.txt> logo após o comando "read ..."?
>> >
>> > Em ter, 14 de jul de 2020 20:32, Jamenson Ferreira Espindula de Almeida Melo <jafesp@gmail.com> escreveu:
>> >>
>> >> Saudações.
>> >>
>> >> Pessoal, até onde sei, um comando emitido em linha de comandos estamos
>> >> no chamado _shell interativo_. Por outro lado, comandos em um arquivo de
>> >> "script" estamos no chamado _shell não interativo_.
>> >>
>> >> Dadas tais premissas, minha pergunta é: a configuração e testagem de
>> >> variáveis no ambiente de shell GNU Bash obedecem à mesma sintaxe ou
>> >> existem diferenças?
>> >>
>> >> A situação: eu uso muito um aplicativo chamado "rclone" para produzir
>> >> cópias de segurança de arquivos na nuvem. O "rclone" exige um arquivo
>> >> previamente configurado para acessar os armazenamentos online. Por
>> >> questões de segurança, esse arquivo de configuração de armazenamentos
>> >> online pode ser cifrado mediante inserção de senha. Para decifrar,
>> >> claro, insere-se a senha.
>> >>
>> >> Ocorre que tal mecanismo cria um problema quando se deseja usar o
>> >> "rclone" em scripts, ou seja, _sem_ ser no modo interativo (como haverá
>> >> a inserção da senha para decifrar o arquivo de configuração se não se
>> >> está no modo interativo?) Para solucionar tal problema, o "rclone"
>> >> obedece a uma variável de ambiente chamada "RCLONE_CONFIG_PASS". Quando
>> >> configurada com a senha, o arquivo de configuração do "rclone" é
>> >> decifrado e a execução ocorre normalmente.
>> >>
>> >> A minha intenção então é _testar_ se a variável de ambiente
>> >> "RCLONE_CONFIG_PASS" já está configurada (independentemente se contém a
>> >> senha correta ou errada) e _ignorar_ nos scripts a chamada ao comando de
>> >> configuração.
>> >>
>> >>
>> >> O problema: o modo recomendado pelos desenvolvedores do "rclone" para
>> >> configurar a variável "RCLONE_CONFIG_PASS" é este:
>> >>
>> >>  = = = = = Início de transcrição = = = = =
>> >>
>> >> #!/bin/echo Source this file don't run it
>> >> echo "Senha, por favor ..."
>> >> read -s RCLONE_CONFIG_PASS
>> >> export RCLONE_CONFIG_PASS
>> >>
>> >>  = = = = = Fim de transcrição = = = = =
>> >>
>> >>
>> >> Eu tentei isto em um arquivo de script e deu errado:
>> >>
>> >>  = = = = = Início de transcrição = = = = =
>> >>
>> >> if env test -n "${RCLONE_CONFIG_PASS}";
>> >> then
>> >> echo "OK";
>> >> else
>> >> echo "Senha, por favor ...";
>> >> read -s RCLONE_CONFIG_PASS;
>> >> export RCLONE_CONFIG_PASS;
>> >> fi
>> >>
>> >> exit 0
>> >>
>> >>  = = = = = Fim de transcrição = = = = =
>> >>
>> >>
>> >> Porém, na linha de comandos, o seguinte deu certo:
>> >>
>> >> if env test -n "${RCLONE_CONFIG_PASS}"; then echo "OK"; else echo \
>> >> "Senha, por favor ..."; read -s RCLONE_CONFIG_PASS; export
>> >> RCLONE_CONFIG_PASS; fi
>> >>
>> >>
>> >> Daí as minhas observações iniciais: o comando em um arquivo de "script"
>> >> (shell não interativo), deu _errado_.
>> >>
>> >> O comando emitido em linha de comandos (shell interativo) deu _certo_.
>> >>
>> >>
>> >> Isso é erro meu? Existem mesmo diferenças?
>> >>
>> >>
>> >> Desculpe-me o _longo_ texto.
>> >>
>> >>
>> >> Muito grato qualquer ajuda!
>> >>
>> >>
>> >> Jamenson Ferreira Espindula de Almeida Melo
>> >> Jaboatão dos Guararapes, Pernambuco, Brasil
>> >> Usuário GNU/Linux nº 166197
>> >> https://linuxcounter.net/cert/166197.png
>> >>
>> >> Impressão digital da chave PGP:
>> >> 234D 1914 4224 7C53 BD13  6855 2AE0 25C0 08A8 6180
>> >>
>> >> _______________________________________________
>> >> Lista brasileira de usuários de shell script
>> >> Endereço de e-mail da lista: shell-script-pt@nongnu.org
>> >> Para se inscrever ou desinscrever acesse: https://lists.nongnu.org/mailman/listinfo/shell-script-pt
>> >> Para ver os arquivos da lista (mensagens anteriores) e pesquisar nelas, acesse https://lists.nongnu.org/archive/html/shell-script-pt/
>> >>
>> >> NOTA: A lista anterior, no Yahoo Groups, foi *desativada*. Por favor utilize somente esta.
>> >
>> > _______________________________________________
>> > Lista brasileira de usuários de shell script
>> > Endereço de e-mail da lista: shell-script-pt@nongnu.org
>> > Para se inscrever ou desinscrever acesse: https://lists.nongnu.org/mailman/listinfo/shell-script-pt
>> > Para ver os arquivos da lista (mensagens anteriores) e pesquisar nelas, acesse https://lists.nongnu.org/archive/html/shell-script-pt/
>> >
>> > NOTA: A lista anterior, no Yahoo Groups, foi *desativada*. Por favor utilize somente esta.
>>
>> _______________________________________________
>> Lista brasileira de usuários de shell script
>> Endereço de e-mail da lista: shell-script-pt@nongnu.org
>> Para se inscrever ou desinscrever acesse: https://lists.nongnu.org/mailman/listinfo/shell-script-pt
>> Para ver os arquivos da lista (mensagens anteriores) e pesquisar nelas, acesse https://lists.nongnu.org/archive/html/shell-script-pt/
>>
>> NOTA: A lista anterior, no Yahoo Groups, foi *desativada*. Por favor utilize somente esta.
>
> _______________________________________________
> Lista brasileira de usuários de shell script
> Endereço de e-mail da lista: shell-script-pt@nongnu.org
> Para se inscrever ou desinscrever acesse: https://lists.nongnu.org/mailman/listinfo/shell-script-pt
> Para ver os arquivos da lista (mensagens anteriores) e pesquisar nelas, acesse https://lists.nongnu.org/archive/html/shell-script-pt/
>
> NOTA: A lista anterior, no Yahoo Groups, foi *desativada*. Por favor utilize somente esta.

Olá, Fábio Assis. Obrigado por responder.

Eu tentei a sua sugestão e não funcionou.

Creio que já entendi o que está acontecendo. A variável é configurada,
porém é perdida quando a execução do shell é terminada. Por outras
palavras, um shell dentro do shell é executado e a variável de
ambiente é configurada dentro desse segundo ambiente e somente durante
o tempo de execução desse segundo ambiente. Penso que é isso o que
está ocorrendo.

Por enquanto, é isso.

Cordialmente,

Jamenson Ferreira Espindula de Almeida Melo
Jaboatão dos Guararapes, Pernambuco, Brasil
Usuário GNU/Linux nº 166197
https://linuxcounter.net/cert/166197.png

Impressão digital da chave PGP:
234D 1914 4224 7C53 BD13  6855 2AE0 25C0 08A8 6180

_______________________________________________
Lista brasileira de usuários de shell script
Endereço de e-mail da lista: shell-script-pt@nongnu.org
Para se inscrever ou desinscrever acesse: https://lists.nongnu.org/mailman/listinfo/shell-script-pt
Para ver os arquivos da lista (mensagens anteriores) e pesquisar nelas, acesse https://lists.nongnu.org/archive/html/shell-script-pt/

NOTA: A lista anterior, no Yahoo Groups, foi *desativada*. Por favor utilize somente esta.

reply via email to

[Prev in Thread] Current Thread [Next in Thread]