Maneira correta de configurar variáveis de ambiente PERMANENT do script

0

Eu quero fazer um processo de instalação muito simples para o meu framework de aplicativos. Eu tenho tudo funcionando, mas quero definir duas variáveis de ambiente. Quero atualizar o PATH e também definir uma variável HOME .

Eu sei que não posso definir um var no processo pai, então como posso fazer isso? Eu não quero exigir que o usuário execute source foo , eu quero que eles possam executar apenas foo install e a ação esteja concluída.

Certamente, existe alguma maneira?

EDIT: Desculpe - eu não quero dizer o% realHOME, quero dizer uma variável MY_FRAMEWORK_HOME !

    
por mtyson 29.01.2016 / 00:14

2 respostas

2

A variável $HOME não é algo com o qual você deve mexer, geralmente; é dependente do usuário. Você não quer que o usuário repentinamente tenha um diretório pessoal diferente! (E se você fizer isso, você deve editar o seu diretório home que está definido em /etc/passwd - o que obviamente requer root permissões.)

O $PATH é outro assunto e deve ser definido em ~/.bashrc ou ~/.bash_profile . Existem vários argumentos a respeito dos quais você deve usar, os quais não entrarei aqui.

Digamos que você queira anexar /var/myapp/bin ao caminho do usuário. Você pode fazer isso adicionando a linha:

export PATH="$PATH:/var/myapp/bin"

para o usuário ~/.bashrc . Um bom método para fazer isso, evitando adicionar a linha, se já estiver lá, é discutido no vi stackexchange :

ex -sc '$a
export PATH="$PATH:/var/myapp/bin"
.
$-,$!uniq
x' ~/.bashrc

Esteja avisado que, se você estiver adicionando mais de uma linha dessa maneira, a mesma verificação de segurança para evitar adicioná-las se elas já estiverem lá não funcionará. Você precisará de lógica diferente para isso.

Você também pode considerar um curso de ação diferente: Adicione links simbólicos aos seus binários de comando em /usr/local/bin , que geralmente já está incluído no $PATH .

Então, digamos, como no meu exemplo acima, que você queira adicionar /var/myapp/bin ao PATH do usuário. A razão pela qual você pode querer fazer isso em primeiro lugar é porque você tem alguns comandos (shell scripts ou binários, não importa) em /var/myapp/bin que você quer que o usuário seja capaz de executar a partir da linha de comando. Digamos que esses comandos sejam myapp_command e myapp_othercommand .

Você pode disponibilizá-los no PATH criando links simbólicos assim:

ln -s /var/myapp/bin/myapp_command /usr/local/bin/myapp_command
ln -s /var/myapp/bin/myapp_othercommand /usr/local/bin/myapp_othercommand

O primeiro argumento para ln -s é o TARGET, o segundo argumento é o nome LINK que você deseja criar para apontar para o destino. (Para mais, veja man ln .)

    
por 29.01.2016 / 02:34
-1

Apenas variáveis export :

export NAME1="value1"
export NAME2="value2"
./my.install

Editar: Fazer isso é possível a partir das seguintes shells (eu sei):

  • DASH
  • BASH
  • KSH
  • ZSH

Editar 2: Mova my.install para my.install.real e crie um novo arquivo chamado my.install :

export HOME='SAMPLE VALUE'
export PATH='SAMPLE VALUE'
./my.install.real
unset HOME
unset PATH
    
por 29.01.2016 / 00:58