On Mon, 18 Jun 2001, Marcelo Barreto Nees wrote:

> Existe um meio de exportar uma vari�vel de modo que somente o root possa
> alterar seu conte�do?


        $ typeset -r xxx=1
        $ xxx=2
        bash: xxx: read-only variable

Tem outras op��es, veja no "man bash".

Mas n�o se iluda, basta chamar um script que o atributo se perde...


> Outra coisa: Quando dou um export XXX=YYY dentro de um script, quando saio
> do script esta vari�vel n�o existe mais, certo?


Sim.  O "export" exporta vari�veis para SUBSHELLs, n�o existe como
exportar para um processo pai.

Para um shell colocar uma vari�vel como sendo uma vari�vel do shell
atual, deve-se usar "source shell_script".  Com o camando "source" o
shell_script est� usando o mesmo ambiente do shell corrente.  Um
sin�nimo para "source" � ".": ". shell_script".


> Como fa�o pra exportar uma vari�vel e fazer com que ela fique valendo pra
> qualquer shell que eu abra?

Exatamente para isso � que existe o EXPORT.

Outra maneira pouco usual para se passar vari�veis para programas, �
definir a vari�vel logo antes de chamar o programa.  Elas n�o v�o
existir no shell corrente, s� no programa chamado:

        $ xxx=1 sh -c 'echo xxx=$xxx' ; echo xxx=$xxx
        xxx=1
        xxx=


Isso indica que o programa "sh" tinha a vari�vel xxx definida, mas que
o shell corrente n�o.  Na verdade, xxx passa a existir para qualquer
subshell do programa, como se tivesse sido exportada.


Para definir vari�veis em shell interativo (que tem prompt para o
usu�rio) existem v�rias op��es.  Voc� pode colocar em /etc/profile
para que a vari�vel passe a valer para todos os shells de "login".

Voc� pode colocar em ~/.bash_profile (ou ~/.profile) para seu uso
pessoal, para os shells de login.

Voc� pode colocar em ~/.bashrc que � executado a cada shell
interativo, como � o caso de um xterm.

Por exemplo, se voc� executar "bash", /etc/profile e ~/.bash_profile
n�o s�o executados pois este n�o ser� um "shell de login", mas
~/.bashrc ser�, pois � um shell interativo.

A vari�vel de ambiente ENV define tamb�m o script a ser executado a
cada shell executado, BASH_ENV tamb�m, e normalmente cont�m
"~/.bashrc".  Observe tamb�m que chamar "bash" � uma coisa, e chamar
"sh" � outra, v�rias extens�es s�o desligadas quando o bash �
executado como "sh", para manter a compatibilidade com outros
sistemas.

Na verdade, existem algumas regras para os scripts de inicializa��o.
De "man bash":

       Login shells:
         On login (subject to the -noprofile option):
               if /etc/profile exists, source it.

               if ~/.bash_profile exists, source it,
                 else if ~/.bash_login exists, source it,
                   else if ~/.profile exists, source it.

         On exit:
               if ~/.bash_logout exists, source it.

       Non-login interactive shells:
         On startup (subject to the -norc and -rcfile options):
               if ~/.bashrc exists, source it.

       Non-interactive shells:
         On startup:
               if the environment variable ENV is non-null, expand
               it and source the file it names, as if the command
                       if [ "$ENV"]; then . $ENV; fi
               had been executed, but do not use PATH to search
               for the pathname.  When not started in Posix mode, bash
               looks for BASH_ENV before ENV.


--- Wagner                      [EMAIL PROTECTED]


Assinantes em 18/06/2001: 2311
Mensagens recebidas desde 07/01/1999: 118729
Historico e [des]cadastramento: http://linux-br.conectiva.com.br
Assuntos administrativos e problemas com a lista: 
            mailto:[EMAIL PROTECTED]

Responder a