Como escrever um script de shell de origem automática para / etc / profile

4

Ouvi através da videira que os arquivos em / etc / profile serão automaticamente obtidos por bash no login?

Eu tentei escrever algo simples em / etc / profile:

 echo "echo 'foo'" > /etc/profile/foo.sh

mas eu tenho esse erro estranho:

bash: /etc/profile/foo.sh: Not a directory

existe uma maneira correta de fazer isso?

    
por Alexander Mills 23.06.2018 / 23:31

1 resposta

8

/etc/profile é um arquivo. Daí o erro ao tentar criar /etc/profile/foo.sh .

/etc/profile.d é o diretório em que você está pensando. Os scripts colocados lá são originados no login. No seu exemplo, você deseja criar /etc/profile.d/foo.sh .

A lógica do script por trás disso e como ela é puxada pode ser vista abaixo. Código semelhante está em /etc/profile , /etc/bashrc , /etc/csh.cshrc e /etc/csh.login .

$ grep -A 8 ^for.*profile.d /etc/profile
for i in /etc/profile.d/*.sh /etc/profile.d/sh.local ; do
    if [ -r "$i" ]; then
        if [ "${-#*i}" != "$-" ]; then
            . "$i"
        else
            . "$i" >/dev/null
        fi
    fi
done
$

Exemplo de criação e invocação de tal script:

# echo id >/etc/profile.d/foo.sh
# su - steve
Last login: Sat Jun 23 21:44:41 UTC 2018 on pts/0
uid=1000(steve) gid=1001(steve) groups=1001(steve),4(adm),39(video),1000(google-sudoers) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
$

Mais informações em O que os scripts em / etc / profile.d do?

    
por 23.06.2018 / 23:34