$ source /etc/environment
$ sudo source /etc/environment
[sudo] password for t:
sudo: source: command not found
Il semble qu'un shell différent de celui qui bash
est exécuté pour s'exécuter source /etc/environment
et que le shell ne soit pas source
intégré.
Mais mon et les shells par défaut de la racine sont les deux bash
.
$ echo $SHELL
/bin/bash
Si sudo
Indeeds utilise un shell différent, pourquoi? J'ai vu la réponse de slm , mais je ne comprends pas dans mon cas.
source
est un shell intégré .. vous ne pouvez pas utilisersudo
pour exécuter un shell intégré comme une commande externe ..Réponses:
source
est un shell intégré, il ne peut donc pas être exécuté sans le shell. Cependant, par défaut,sudo
n'exécutez pas shell. Desudo
Si vous souhaitez exécuter explicitement le shell, utilisez l'
-s
option:Ce qui est toujours inutile car après la fermeture du shell, les changements d'environnement sont perdus.
la source
Dans le domaine de la résolution du problème plutôt que de la réponse à la question , voici la manière la plus évidente (pour moi) de trouver un fichier que seul root peut lire:
Cela utilise la substitution de processus . Il prend la sortie de la
cat
commande et la transforme en un pseudo-fichier, auquel vous pouvez passersource
. la source exécute ensuite les commandes dans le shell courant.Notez que sur la plupart des systèmes, il
/etc/environment
est lisible dans le monde entier, vous devriez donc pouvoir simplement exécuter ceci:la source
sudo
attend une commande mais vous donnez un shell intégré afin qu'il ne puisse pas trouver la commande. Si vous écriveztype source
, vous pouvez voir la sortie:source is a shell builtin
et la sortie dewhich source
est vide.Par exemple
sudo strace
cela fonctionnera etwhich strace
donnera une sortie car strace est une commande.Edit: De plus, vous pouvez voir les
sudo su;sudo source /etc/environment
œuvres bien, donc aucun shell différent n'est utilisé.la source