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]