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 .bashrc
arquivo, 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 .bashrc
não ajudará no tempo de execução. Você pode colocar a inicialização, /etc/profile.d
mas 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
- variáveis de ambiente, e não novas funções de shell,
- 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 set
para 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 set
execuçã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=BAR
na 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 cd
acessar pastas específicas.
direnv
permite 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.