$ source /etc/environment
$ sudo source /etc/environment
[sudo] password for t:
sudo: source: command not found
Parece que bashse ejecuta un shell diferente al que se ejecuta source /etc/environmenty ese shell no tiene sourcetan incorporado.
Pero mis y los shells predeterminados de la raíz son ambos bash.
$ echo $SHELL
/bin/bash
Si sudosangría usa un caparazón diferente, ¿por qué lo es? Vi la respuesta de slm , pero no entiendo en mi caso.

sourcees una cáscara builtin..you no se puede utilizarsudopara ejecutar una orden interna del shell como un comando externo ..Respuestas:
sourcees un shell incorporado, por lo que no se puede ejecutar sin el shell. Sin embargo, de manera predeterminada,sudono ejecute shell. DesdesudoSi desea ejecutar explícitamente shell, use la
-sopción:Lo que sigue siendo inútil porque después de salir del shell, se pierden los cambios del entorno.
fuente
En el ámbito de resolver el problema en lugar de responder la pregunta , esta es la forma más obvia (para mí) de obtener un archivo que solo la raíz puede leer:
Esto utiliza la sustitución de procesos . Toma el resultado del
catcomando y lo convierte en un pseudoarchivo al que puede pasarsource. fuente luego ejecuta los comandos en el shell actual.Tenga en cuenta que en la mayoría de los sistemas,
/etc/environmentes legible en todo el mundo, por lo que debería poder ejecutar esto:fuente
sudoespera un comando pero le está dando un shell incorporado para que no pueda encontrar el comando. Si escribetype source, puede ver la salida:source is a shell builtiny la salida dewhich sourceestá vacía.Por ejemplo
sudo strace, funcionará ywhich stracedará salida porque strace es un comando.Editar: Además, puede ver que
sudo su;sudo source /etc/environmentfunciona bien, por lo que no se usa un shell diferente.fuente