Como criar scripts de inicialização corretos em um shell interativo de não-login

2

Estou tentando configurar um ambiente sadio / utilizável em uma derivada do OpenSolaris barebones (OmniOS, uma distribuição do Illumos / OpenIndiana). Eu tenho todo o código de encanamento que eu preciso em arquivos .profile, .inputrc e .bashrc prontos para promover o uso em todo o sistema, mas nenhum script de todo o sistema está sendo fornecido para shells que não são de login. O Bash tenta carregar o arquivo .bashrc do usuário no su, mas o $ HOME (e qualquer outra variável de ambiente) permanece configurado para o usuário anterior.

Saída de um login direto (SSH):

login as: myuser
Using keyboard-interactive authentication.
Password:
/etc/profile run
myuser's .bashrc run
myuser's .profile run
myuser@Helios:~$ echo ~
/home/myuser
myuser@Helios:~$

Usuário de comutação de saída:

root@Helios:/etc# su myuser
bash: /root/.bashrc: Permission denied
bash-4.2$ id
uid=1001(myuser) gid=100(users) groups=100(users),27(sudo)
bash-4.2$ echo ~
/root
bash-4.2$

Note em particular a tentativa de fonte do .bashrc do root em vez do .bashrc do myuser.

su (sem argumentos adicionais) sempre funcionou perfeitamente no Ubuntu, Fedora, etc. e pretendo replicar essa experiência, mas o que posso fazer quando nenhum script de todo o sistema é executado e os scripts do usuário não podem ser encontrados? Estou inclinado a culpar a versão do OmniOS de bash e / ou su por perder algo, mas qual é exatamente o comportamento correto? Posso configurar / acessar / script de encanamento adicional em algum lugar que aborde a falha na atualização de $ HOME e outros envvars?

Mais notas:

  • não há homem bash no OmniOS (pelo menos não usando MANPATH = / opt / omni / share / man: / opt / mysql55 / man: /opt/gcc-4.4.4/man: / usr / gnu / share / man: / usr / local / man: / usr / local / share / man: /usr/man: /usr/share/man)
  • / etc / bashrc e /etc/bash.bashrc nunca são originados (o que é esperado, pois aparentemente é uma convenção específica da distribuição, mas o Ubuntu parece estar carregando estes sem referência de .bashrc)
por HonoredMule 29.07.2013 / 10:09

2 respostas

3

O comando su não altera a Variável de ambiente HOME no Solaris. É assim que funciona. No Linux e * BSD, su faz reset HOME , eu acho que é uma diferença BSD / SysV. O Bash está se comportando perfeitamente normalmente: ele tenta carregar ~/.bashrc e, como HOME ainda é /root , isso é /root/.bashrc .

A ideia é que, quando você su to root, o shell que você inicia e outros programas ainda procurarão por seus arquivos de configuração em seu diretório inicial. Se você quisesse o ambiente do usuário de destino, você executaria su - .

Se você deseja definir HOME , caso contrário, deixe o ambiente inalterado, defina-o explicitamente.

HOME=~myuser su myuser

Se o bash carrega um arquivo de todo o sistema é uma opção de tempo de compilação. Essa opção está habilitada no Ubuntu, mas desabilitada no OmniOS.

    
por 30.07.2013 / 03:37
0

O seu aplicativo é capaz de utilizar o SMF? Nesse caso, pode ser mais fácil configurar um serviço para o aplicativo.

Eu vi um script Python que facilita muito a geração de um XML para uso do SMF:
Manifold

Espero que isso ajude.

    
por 15.03.2014 / 02:53