“sudo: source: comando não encontrado”

14
$ source /etc/environment 

$ sudo source /etc/environment 
[sudo] password for t: 
sudo: source: command not found

Parece que um shell diferente de bash é executado para executar source /etc/environment e esse shell não tem source como interno.

Mas minhas conchas padrão e a raiz são ambas bash .

$ echo $SHELL
/bin/bash

Se sudo indeeds usa um shell diferente, por que é isso? Eu vi resposta do slm , mas não entendo no meu caso.

    
por Tim 08.05.2015 / 23:59

3 respostas

22

source é um shell embutido, portanto, não pode ser executado sem o shell. No entanto, por padrão, sudo não executa o shell. De sudo

Process model

When sudo runs a command, it calls fork(2), sets up the execution environment as described above, and calls the execve system call in the child process

Se você deseja executar explicitamente o shell, use -s option:

# sudo -s source /etc/environment

Que ainda é inútil porque depois que o shell é encerrado, as mudanças no ambiente são perdidas.

    
por 09.05.2015 / 00:16
6

No reino de solução do problema em vez de responder à pergunta , aqui está a maneira mais óbvia (para mim) de obter um arquivo que só o root pode ler:

source <(sudo cat /etc/environment)

Isso usa substituição de processos . Ele pega a saída do comando cat e o transforma em um pseudo-arquivo, que você pode passar para source . source então executa os comandos no shell atual.

Observe que na maioria dos sistemas, /etc/environment é legível por todos, então deve ser capaz de executar apenas isto:

source /etc/environment
    
por 09.05.2015 / 04:13
2

sudo espera um comando, mas você está fornecendo um shell embutido para não encontrar o comando. Se você escrever type source , poderá ver a saída: source is a shell builtin e a saída de which source estará vazia.

Por exemplo, sudo strace funcionará e which strace fornecerá saída porque strace é um comando.

Edit: Além disso, você pode ver sudo su;sudo source /etc/environment funciona muito bem, então shell diferente não é usado.

    
por 09.05.2015 / 00:43

Tags