Quais arquivos bash rc são executados em shells não interativos / não-login?

3

Meu entendimento

  • não há arquivos rc chamados para shells não interativos / não-login; por exemplo, aqueles executados pelo cron (eu não sei ao certo e gostaria de confiar na experiência da comunidade)

  • Os shells
  • não-interativos exigem que a variável de ambiente BASH_ENV seja definida, o que permite configurá-la para um arquivo rc específico (por exemplo, BASH_ENV=$HOME/.bash_profile )

A esperança

Não tenho certeza sobre a infinidade de arquivos rc disponíveis, por isso estou curioso para saber se existem alguns que eu não conheço. Na esperança de encontrar um arquivo rc que atenda às seguintes condições:

  • chamado independentemente do modo de interação / login para que as variáveis de ambiente globais do shell possam ser definidas em um só lugar
  • executa mais como csh / tcsh
por vol7ron 03.05.2017 / 18:20

1 resposta

1

A resposta à sua pergunta específica é que muitas vezes apenas /etc/bash.bashrc (ou /etc/bashrc ) é carregado.

Parece haver algumas maneiras de resolver isso, mas a maioria delas são soluções alternativas, infelizmente. Em nenhuma ordem particular de preferência:

Fazer um login falso

Logins executam /etc/profile e geralmente você pode colocar seus scripts personalizados em /etc/profile.d/*.sh

Envolva-o em um login do bash

Às vezes, é mais fácil acionar um login, por exemplo

echo "do whatever $PATH $BASH $PS1 $0"

torna-se

bash -lc 'echo "do whatever $PATH $BASH $PS1 $0"'

Carregue manualmente o perfil

Faça o que os logins fazem, carregue manualmente o perfil

source /etc/profile;echo "do whatever $PATH $BASH $PS1 $0"

Editar variáveis de ambiente global

Para variáveis simples, você pode adicionar a /etc/environment Variáveis do ambiente_do_segundo do Ubuntu , mas a expansão das variáveis não funciona

THING_HOME="/opt/thing"
PATH="$PATH:/opt/thing" # this will NOT work

Para o PATH, você pode anexá-lo, por exemplo sudo sed -i 's#PATH=\"[^\"]*#&:/opt/thing#' /etc/environment

Editar todos os shells do bash

Você pode adicionar a /etc/bash.bashrc (ou /etc/bashrc ) porém isso normalmente sai cedo se não for interativo, então você precisa hackar suas adições antes:

# If not running interactively, don't do anything
[ -z "$PS1" ] && return

Não faça nada disso

  • Considere os links simbólicos se você estiver tentando adicionar algo ao PATH
  • Considere fazer com que seus programas / scripts modifiquem seu próprio ambiente
  • O Systemd tem EnvironmentFile e Environment , e. %código%

Estou interessado em saber se mais alguém tem melhores soluções!

    
por 19.07.2018 / 01:37