Alterando o valor de $ HOME em .bashrc

3

Primeiro de tudo um pouco de fundo. Peço desculpas antecipadamente pelo uso indevido da terminologia. Por favor, corrija-me quando necessário.

Para o meu trabalho, irei executar simulações remotamente via ssh em várias máquinas Ubuntu. Essas máquinas estão em uma rede e minha conta está vinculada a todas elas, ou seja. $HOME é /home/links/Ogaday e é espelhado em cada máquina. Então eu faço um diretório em uma máquina naquela pasta, e ela aparece em outra máquina (este é um caso onde eu não sei como usar os termos corretos). Há também memória local em cada máquina, acessível por cada usuário nessa máquina, chamada /scratch/ . Eu farei um diretório em /scratch/ para fazer o meu trabalho real, porque eu não acho que tenho memória suficiente na minha conta para executar as simulações em $ HOME, e será mais rápido porque é tudo local, eu suponho.

Agora, há softwares instalados nessas máquinas que preciso usar e eles estão instalados em diretórios nos quais não tenho acesso de gravação ( /usr/local/software/ ). No entanto, esse software tem um script bash que define variáveis de ambiente. Eu devo anexar o script bash ( source /usr/local/software/etc/bashrc ) a $HOME/.bashrc para definir as variáveis de ambiente necessárias. Bastante padrão até agora, isso configura tudo para que esse software seja executado quando eu fizer login, correto? Agora, acho que o software nesses computadores não foi configurado corretamente, porque o .../etc/bashrc deve definir uma variável chamada $SOFTWARE_INST_DIR , o diretório de instalação. Por padrão, isso é $HOME/software e é necessário alterar esse arquivo bashrc para que, em vez disso, defina-o como /usr/local/software . É claro que não tenho acesso de gravação para .../etc/bashrc . Existem outros problemas semelhantes, isso é apenas o que falha primeiro.

Como uma correção, copiei esse arquivo para $HOME/software-etc/bashrc e anexei source $HOME/software-etc/bashrc a $HOME/.bashrc em vez de anexar source /usr/local/software/etc/bashrc , para poder editar as variáveis que ele atribui. Há algo fundamentalmente errado com isso? Eu pensei que uma outra solução seria, em vez de copiar o arquivo bashrc do local de instalação do software, anexando export $HOME=/scratch/ogaday a .bashrc, o qual eu suponho reatribuiria meu diretório home ao zero. Estou correcto? Isso é perigoso? Eu realmente não usaria essas máquinas para nada além de executar longas simulações sobre elas.

ps: A solução final seria pedir aos caras de TI para investigar isso, eu acho! Eu prefiro fazer uma correção rápida, embora seja possível.

    
por Ogaday 02.10.2015 / 12:44

1 resposta

4

Não, não há nada de errado em copiar o arquivo rc em outro lugar. Dito isso, embora você possa realmente alterar seu $HOME adicionando HOME=/foo a um dos arquivos lidos na inicialização ( ~/.profile , por exemplo), isso não é uma boa ideia. HOME é usado por muitas coisas, não apenas por seus scripts e não há razão para alterá-lo, pois isso pode ter consequências indesejadas.

Por exemplo, os arquivos de configuração padrão para uma variedade de programas, incluindo o seu shell, são armazenados em $HOME . Se você alterar isso, suas configurações serão perdidas.

Agora, se eu entendi corretamente, seu principal objetivo aqui é ter $HOME/software point para /usr/local/software . Em vez de copiar os arquivos, a solução mais simples seria tornar $HOME/software um link apontando para /usr/local/software .

  1. Renomeie $HOME/software (se já existir):

    mv $HOME/software $HOME/software.old
    
  2. Crie um link chamado $HOME/software que aponta para /usr/local/software :

    ln -s /usr/local/software $HOME/software
    

Agora, qualquer coisa procurando $HOME/software encontrará /usr/local/software .

Da mesma forma, para trabalhar localmente em cada máquina, crie o diretório em /scratch e vincule-o ao seu $HOME :

mkdir /scratch/ogaday
ln -s /scratch/ogaday $HOME/work

Agora, tudo que você faz em $HOME/work realmente acontecerá em /scratch/ogaday .

Finalmente, tenha em mente que existem diferentes tipos de shell. Quando você faz login via ssh , está executando um shell de login interativo e, em muitos sistemas, $HOME/.bashrc é ignorado por esses shells. Enquanto o Ubuntu especificamente também lê $HOME/.bashrc , para tais shells, muitas outras distribuições não. Portanto, é mais seguro usar $HOME/.profile e não $HOME/.bashrc para definir variáveis de ambiente. Veja aqui para uma explicação de quais arquivos são lidos quando.

    
por terdon 02.10.2015 / 16:32