shell linux global da memória linux na variável mem - da shell

1

Existe alguma maneira de eu definir uma variável env sem editar arquivos para estar na memória e efetuar outros shells também, o que entrará em vigor em qualquer novo usuário que conecte essa máquina e entrará em vigor somente após a próxima reinicialização da máquina? Máquina Linux?

Estou tentando lembrar de algo em meu linux que será efetivo (a partir de um script) apenas pelo tempo que a máquina estiver ativa (não quero um arquivo por esse motivo), então, do meu shell, quero definir algum sinalizador que será válido para qualquer usuário que se conecte como:

linux_test_run=yes

no entanto, quero que seja eficaz para qualquer novo shell aberto nesse Linux. e eu quero que da próxima vez alguém reinicie aquela máquina que a variável desaparece ...

Qualquer (simples) para eu conseguir isso? (sem usar arquivos ...)

    
por Jas 05.04.2011 / 12:12

4 respostas

0

Bem, os arquivos em /tmp são habitualmente limpos na reinicialização, então por que não ter algum script de fonte em um arquivo lá, algo como "se este arquivo existir, fonte dele"? Então, você pode fazer sua inicialização nesse arquivo conforme necessário. Isso pode ser colocado em algum arquivo de inicialização bash que é originado por login em shells como /etc/profile . (Isso pressupõe que você deseja que ele seja originado por shells interativos em vez de shells de login.)

No entanto, não estou muito claro sobre o contexto. Se você pudesse dar mais detalhes sobre o que está tentando fazer, obteria melhores respostas.

    
por 05.04.2011 / 19:11
1

Você pode usar export para marcar uma variável a ser passada para processos filhos no ambiente.

export linux_test_run=yes

Se você quiser que a variável esteja disponível para usuários recém-conectados, você precisará editar os arquivos de inicialização do shell.

    
por 05.04.2011 / 12:19
1

Desculpe, você precisará editar um arquivo de inicialização em algum lugar e, se desejar, para todos os usuários, provavelmente o bashrc in /etc .

No entanto, se a única razão pela qual você não deseja usar arquivos é que deseja que esse comportamento desapareça na reinicialização, há outras maneiras de fazer isso:

  1. Chame um arquivo setvariable.bash de dentro do bashrc . Dentro desse arquivo, você exporta sua variável
  2. Coloque um arquivo no seu /etc/init.d que será iniciado na reinicialização e desative o arquivo setvariable.bash (substituindo-o por um arquivo em branco ou algo assim)

É um hack, mas pode funcionar.

    
por 05.04.2011 / 12:27
0

A maioria dos métodos de login lê variáveis de ambiente de /etc/profile . (Pode haver outras possibilidades, mas esta é a mais fácil de agir.) Então, se eu entendi corretamente, você gostaria de adicionar uma atribuição de variável de ambiente para /etc/profile na próxima reinicialização, e removê-lo na reinicialização depois disso .

Primeiro, se você ainda não tiver feito isso (crie uma distribuição), crie um diretório chamado /etc/profile.d e adicione esse snippet a /etc/profile :

for x in /etc/profile.d/*.sh; do
  . "$x"
done
unset x

Crie um arquivo contendo export linux_test_run=yes chamado /etc/profile.d/test_run.sh.0 .

Adicione o snippet a seguir a /etc/rc.local (ou algum outro script executado no momento da inicialização):

for x in /etc/profile.d/*.sh.[0-9]*; do
  n=${x##*.}              # extract the part after the last .
  case n in
    *[!0-9]*) continue;;  # n is not a number, so skip this file
    *[1-9]*) mv "$x" "${x%.*}.$(($n-1))";; # decrement the number in the file name
    *)     # the file is *.sh.0, so rename to .sh and schedule for deletion
      echo "${x%.*}" >>/etc/profile.d/cancel-on-reboot.list
      mv "$x" "${x%.*}";;
  esac
done
if [ -e /etc/profile.d/cancel-on-reboot.list ]; then
  # rename all files in this list so they won't be considered any longer
  while read -r x; do
    mv "$x" "$x.cancelled"
  done </etc/profile.d/cancel-on-reboot.list
  rm /etc/profile.d/cancel-on-reboot.list
fi

Se você quiser reativar a configuração de uma reinicialização, renomeie-a para *.sh.0 .

    
por 05.04.2011 / 22:04