$ source /etc/environment
$ sudo source /etc/environment
[sudo] password for t:
sudo: source: command not found
Es scheint, dass eine andere Shell als bash
die zur Ausführung ausgeführte ausgeführt wird source /etc/environment
und diese Shell nicht source
so eingebaut ist.
Aber meine und die Standardshells der Wurzel sind beides bash
.
$ echo $SHELL
/bin/bash
Wenn sudo
indeeds eine andere Shell verwendet, warum? Ich habe die Antwort von slm gesehen , verstehe sie aber in meinem Fall nicht.
source
ist eine eingebaute Shell ... Sie können keinesudo
eingebaute Shell wie einen externen BefehlAntworten:
source
ist eine eingebaute Shell, daher kann sie nicht ohne die Shell ausgeführt werden.sudo
Führen Sie jedoch standardmäßig keine Shell aus. Vonsudo
Wenn Sie die Shell explizit ausführen möchten, verwenden Sie die
-s
Option:Das ist immer noch nutzlos, da nach dem Beenden der Shell Umgebungsänderungen verloren gehen.
quelle
Im Bereich der Problemlösung anstatt der Beantwortung der Frage ist hier die (für mich) naheliegendste Möglichkeit, eine Datei zu erstellen, die nur Root lesen kann:
Dies verwendet die Prozessersetzung . Es nimmt die Ausgabe des
cat
Befehls und wandelt sie in eine Pseudodatei um, an die Sie übergeben könnensource
. source führt dann die Befehle in der aktuellen Shell aus.Beachten Sie, dass es auf den meisten Systemen
/etc/environment
weltweit lesbar ist. Daher sollten Sie in der Lage sein, Folgendes auszuführen:quelle
sudo
erwartet einen Befehl, aber Sie geben eine eingebaute Shell an, damit sie den Befehl nicht finden kann. Wenn Sie schreibentype source
, können Sie die Ausgabe sehen:source is a shell builtin
und die Ausgabe vonwhich source
ist leer.Zum Beispiel
sudo strace
wird funktionieren undwhich strace
wird ausgegeben, weil strace ein Befehl ist.Bearbeiten: Sie können auch sehen,
sudo su;sudo source /etc/environment
funktioniert gut, so dass keine andere Shell verwendet wird.quelle