$ source /etc/environment
$ sudo source /etc/environment
[sudo] password for t:
sudo: source: command not found
Parece que um shell diferente do que bash
é executado para executar source /etc/environment
e esse shell não tem source
como embutido.
Mas as conchas padrão da minha e da raiz são ambas bash
.
$ echo $SHELL
/bin/bash
Se sudo
indeeds usa um shell diferente, por que é? Vi a resposta do slm , mas não entendo no meu caso.
source
é um shell builtin..you não pode usarsudo
para executar um builtin shell como um comando externo ..Respostas:
source
é um shell embutido, portanto, não pode ser executado sem o shell. No entanto, por padrão,sudo
não execute o shell. A partir desudo
Se você deseja executar explicitamente o shell, use a
-s
opção:O que ainda é inútil porque, após a saída do shell, as alterações no ambiente são perdidas.
fonte
No campo da solução do problema, em vez de responder à pergunta , eis a maneira mais óbvia (para mim) de obter um arquivo que somente o root pode ler:
Isso usa substituição de processo . Ele pega a saída do
cat
comando e o transforma em um pseudo-arquivo, para o qual você pode passarsource
. O source executa os comandos no shell atual.Observe que, na maioria dos sistemas,
/etc/environment
é legível pelo mundo; portanto, você deve poder executar isso:fonte
sudo
espera um comando, mas você está dando um shell embutido para que ele não possa encontrar o comando. Se você escrevertype source
, poderá ver a saída:source is a shell builtin
e a saída dewhich source
está vazia.Por exemplo
sudo strace
, funcionará ewhich strace
dará saída porque strace é um comando.Edit: Além disso, você pode ver
sudo su;sudo source /etc/environment
funciona bem, para que diferentes shell não sejam usados.fonte