$ source /etc/environment
$ sudo source /etc/environment
[sudo] password for t:
sudo: source: command not found
Кажется, что оболочка, отличная от bash
запускаемой source /etc/environment
, не имеет source
встроенной оболочки .
Но мой и корень по умолчанию оболочки оба bash
.
$ echo $SHELL
/bin/bash
Если sudo
Indeeds использует другую оболочку, почему? Я видел ответ SLM , но не понимаю, в моем случае.
source
встроенная оболочка .. вы не можете использоватьsudo
для запуска встроенную оболочку как внешнюю команду ..Ответы:
source
это встроенная оболочка, поэтому она не может быть выполнена без оболочки. Однако по умолчаниюsudo
не запускается оболочка. Изsudo
Если вы хотите явно выполнить оболочку, используйте
-s
опцию:Что по-прежнему бесполезно, потому что после выхода из оболочки изменения среды теряются.
источник
В плане решения проблемы, а не ответа на вопрос , вот наиболее очевидный (для меня) способ получения файла, который может прочитать только root:
Это использует процесс замены . Он принимает выходные данные
cat
команды и превращает их в псевдофайл, который вы можете передатьsource
. Затем источник запускает команды в текущей оболочке.Обратите внимание, что на большинстве систем
/etc/environment
он доступен для чтения всем, поэтому вы должны просто выполнить это:источник
sudo
ожидает команду, но вы даете встроенную оболочку, поэтому она не может найти команду. Если вы напишитеtype source
, вы увидите вывод:source is a shell builtin
и выводwhich source
пуст.Например,
sudo strace
будет работать иwhich strace
выдаст вывод, потому что strace - это команда.Редактировать: Кроме того, вы можете видеть
sudo su;sudo source /etc/environment
работы хорошо, поэтому не используется другая оболочка.источник