Por que não posso fornecer um arquivo explicitamente usando su -c?

0

Estou tentando obter su para source /home/ghost/.bashrc , mas parece não carregar o conteúdo:

$ su -l -c 'source /home/ghost/.bashrc; nvm' ghost
-su: nvm: command not found

Eu uso nvm para gerenciar as versões do Node. O Nvm é normalmente originado pelo usuário ghost em /home/ghost/.bashrc :

# in /home/ghost/.bashrc
export NVM_DIR="/home/ghost/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh"  # This loads nvm

Eu encontrei de estes questsions que colocar o código nvm init em /home/ghost/.profile torna nvm disponível para su -l desde o início um shell de login.

Eu ainda não consigo entender por que não posso source o arquivo explicitamente. Alguém pode me dizer por quê?

    
por beane 06.02.2016 / 18:30

1 resposta

1

O arquivo estava sendo adquirido, mas a execução foi interrompida quando ele chegou a esta instrução case , que só continuará se estiver sendo originado em um shell no modo interativo.

case $- in
    *i*) ;;
      *) return;;
esac

A variável $- representa os sinalizadores com os quais o shell atual foi inicializado. Se não vir i (o sinalizador para o modo interativo), o código retornará. Como o shell não estava sendo executado no modo interativo, source .bashrc parou quando atingiu essa instrução case .

Para referência, a saída de echo $- ao usar um shell interativo normal é himBH . A saída de su -l -c 'echo $-' ghost , no entanto, vejo hBc .

Mover as linhas nvm acima dessa instrução resolveu o problema, assim como colocá-las em uma .profile ou .bashrc limpa.

    
por beane 07.02.2016 / 00:22