É possível definir onde o .bash_profile está localizado na linha de comando do bash?

2

Estou executando o bash programaticamente a partir do objetivo c para criar um aplicativo do tipo terminal. Uma vez iniciado, gostaria de executar alguns comandos antes de passar o controle para o usuário. Normalmente, eles estariam no .bash_profile . Este arquivo não é acessível para mim e não é algo que eu gostaria de mexer de qualquer maneira, pois não quero afetar o ambiente padrão do bash para o usuário. Eu tentei a opção -c script.sh , mas depois que o script.sh terminou a execução, o bash sai. Existem outras opções que eu tenho diferente de programaticamente digitando o comando que eu preciso executar? Eu preferiria que o usuário não visse tudo.

    
por Justin808 04.03.2012 / 04:21

2 respostas

2

Você pode tentar o seguinte:

bash --rcfile <your_rc_file> --noprofile -i

O que as opções significam:

  • --rcfile : use o seguinte como o arquivo de inicialização
  • --noprofile : Não processa os arquivos .bash_profile , .profile , /etc/profile , etc. Arquivos usados normalmente no shell de login.
  • -i : É um shell interativo (como o oposto de -c , que sai quando o argumento para -c é processado).

A página de manual de bash é muito boa. Você poderia usá-lo para mais detalhes sobre como o bash pode ser lançado.

    
por 04.03.2012 / 06:57
2

Você pode invocar o bash com --rcfile myfile e ter test -f ~/.bashrc && source ~/.bashrc no final de myfile . Isso pressupõe que você esteja lançando um shell interativo, mas sem login.

Para um shell de login, você teria que imitar o comportamento do bash em relação a /etc/profile , .profile , .bash_profile , .bash_login e .bash_logout , que é tedioso, mas factível. Você ainda executaria bash --rcfile myfile , mas myfile conteria

test -r /etc/profile && source /etc/profile

for f in ~/.bash_profile ~/.bash_login ~/.profile
do
   if test -r $f
   then
      source $f
      break
   fi
done

trap 'source ~/.bash_logout' 0
    
por 04.03.2012 / 07:35

Tags