Como posso fazer com que o software instalado localmente seja fornecido automaticamente quando eu fizer login na minha conta?

Como posso fazer com que o software instalado localmente seja fornecido automaticamente quando eu fizer login na minha conta?

Eu construí e instalei um novo software manualmente (a partir de um repositório git remoto). Cada vez que quero usá-lo, executo algo como,

. /path/to/setup_software.sh

mas gostaria que isso acontecesse automaticamente sempre que eu fizesse login na minha conta, em vez de fazer isso manualmente. Tentei colocar o comando acima dentro do meu .bashrcarquivo, para que o arquivo de configuração seja gerado toda vez que eu abrir meu kernel. Tudo funciona bem depois disso e estou feliz. Meu único problema menor (realmente menor) é que ele imprime algumas mensagens de log logo após eu abrir o kernel e todo o fornecimento leva algum tempo (o que eu não gosto de ter: D). De qualquer forma, presumo que exista uma solução mais simples, talvez movendo minha pasta de instalação para algum lugar que execute o arquivo de configuração automaticamente; Qualquer ajuda seria muito apreciada.

Responder1

Colocar o comando source(ou .) em um arquivo de inicialização diferente .bashrcnão ajudará no tempo de execução. Você pode colocar a inicialização, /etc/profile.dmas o atraso será o mesmo. Quanto às mensagens de log, tente isso em.bashrc

. /path/to/setup_software.sh >/dev/null 2>&1

Você não verá as mensagens de log. Você também não verá nenhum erro aparecendo.

Responder2

Você só vai querer colocá-lo em ~/.bash_profile, pois é isso que seu shell executa no login; problema: se você não estiver efetuando login em um shell (por exemplo, porque você efetuou login usando uma interface gráfica), isso não será executado.

observação: esta é uma das três respostas separadas; a separação é pretendida.

Responder3

Se você sabe que seu script apenas define coisas que sãoambos

  1. variáveis ​​de ambiente, e não novas funções de shell,
  2. nunca mude (por exemplo, não dependa da hora, da data ou do número da versão de algo que você possa atualizar),

então você pode simplesmente "emular" o que o script faz: ele definirá algumas variáveis ​​de ambiente.

Então, como comparar quais são as variáveis ​​de ambiente antes e depois de executar seu script? diffé muito bom em comparar arquivos de texto.

Você pode usar setpara fornecer as variáveis ​​de ambiente (depois de definir a opção posix.

E você pode usar <(...)para criar um arquivo temporário para armazenar o resultado da setexecução em um subshell. Então, junte tudo isso:

$ diff <(set -o posix; set) <(export FOO=BAR; set -o posix; set)

vou te contar

33a34
> FOO=BAR

que você leu como "há uma linha FOO=BARna segunda saída, não na primeira".

Você pode correr

$ diff <(set -o posix; set) <(. /path/to/setup_software.sh; set -o posix; set)

para descobrir o que seu script de configuração mudou no ambiente. Você precisará de um cérebro humano para interpretar isso – algumas coisas serão simplesmente irrelevantes, outras serão o que o script realmente faz ao seu sistema que tem influência.

Você pode então adicionar todas as variáveis ​​alteradas no seu ~/.bashrc, por exemplo

export FOO=BAR

observação: esta é uma das três respostas separadas; a separação é pretendida.

Responder4

Isso soa perigosamente como se você estivesse tentando demais! Você pode simplesmente adicionar um alias que origine o script e então inicie seu software:

alias startit=". /path/to/setup_software.sh; run_software"

e depois ligue startit.

Se for mais do que apenas um comando, pode ser que você esteja procurando algo como ativação automática de ambientes ao cdacessar pastas específicas.

direnvpermite que você faça praticamente isso. É claro que isso não resolve o problema de que a origem do script leva tempo - mas só faz isso uma vez quando você entra em um diretório específico, e não depois para o mesmo shell.

observação: esta é uma das três respostas separadas; a separação é pretendida.

informação relacionada