Como instalar e desinstalar um script originado em todos os shells interativos via yum on Centos?

0

Eu gostaria de empacotar, instalar e desinstalar um rpm que possa adicionar uma mensagem de aviso contextual em todas as inicializações de shells interativas para todos os usuários (na verdade, pelo menos, ambas as sessões bash ssh session e bash gnome). Basicamente, o código exibiria a mensagem de aviso se um arquivo estiver faltando.

Bem, os candidatos são /etc/bashrc , /etc/profile , /etc/profile.d/myscript.sh , /etc/skel/.bash_profile , /etc/skel/.bashrc .

A maneira mais fácil seria instalar algo em /etc/profile.d , mas ele não atende a minha necessidade (sessão ssh bash).
Acho que o lugar certo é /etc/skel/.bashrc + exisiting .bashrc , mas não me sinto seguro ao anexar / remover meu código de / para esses arquivos ... Meu entendimento é que yum e rpm colocam e removem arquivos; eles não são projetados para modificar com segurança arquivos de texto.
Eu gostaria de algo como /etc/bashrc.d/ ...

Onde devo instalar com segurança a mensagem de aviso para que ela possa estar disponível em todos os shells interativos e desinstalada com segurança ? Com segurança, quero dizer, sem excluir nada indesejado.

    
por rdupz 03.11.2016 / 10:35

1 resposta

1

O arquivo /etc/bashrc está marcado como %config(noreplace) no arquivo setup rpm. Isso significa que, se você atualizá-lo, yum não o substituirá. Ao atualizar um pacote, se houver um /etc/bashrc atualizado, yum criará /etc/bashrc.rpmnew . Então você pode modificá-lo com segurança, se desejar.

Mas parece que não será necessário. Dê uma olhada no /etc/bashrc em seu sistema centos / rhel / fedora / etc, e você encontrará:

if ! shopt -q login_shell ; then # We're not a login shell
[...]
    for i in /etc/profile.d/*.sh; do
        if [ -r "$i" ]; then
            if [ "$PS1" ]; then
                . "$i"
            else
                . "$i" >/dev/null
            fi
        fi
    done
[...]

Esse código garante que os arquivos em /etc/profile.d sejam executados para shells de login (caso em que são executados a partir de /etc/profile ) e para shells não-login (nesse caso, esse loop se encarrega de executá-los) .

Em outras palavras, você tem um /etc/bashrc.d e é chamado de /etc/profile.d .

    
por 03.11.2016 / 13:46