Il y a quelques questions sur le site qui semblent liées à mon problème mais je n'ai pu trouver de solution à aucune d'entre elles.
Mon système d'exploitation est Ubuntu 12.04. J'ai mvn
installé dans /tools/noarch/apache-maven-3.1.1
et j'ai ajouté les lignes suivantes à la fin de mon /etc/profile
:
export M2_HOME=/tools/noarch/apache-maven-3.1.1
export PATH=$M2_HOME/bin:$PATH
Après cela j'exécute source /etc/profile
.
Maintenant , mon problème est le suivant : quand je lance mvn --version
la commande réussit et mvn
exécutable se trouve, alors que si j'Execute: sudo mvn --version
Je reçois la sortie: sudo: mvn: command not found
. Je sais que cela PATH
peut être différent quand j'exécute une commande avec sudo
et c'est pourquoi j'ai essayé ceci:
$>sudo echo $PATH
/tools/noarch/apache-maven-3.1.1/bin:... some other stuff ...
Une autre chose que j'ai essayée est d'exécuter sudo su -
, puis de taper mvn --version
. Dans ce cas mvn
, la commande est trouvée et la commande réussit. Qu'est-ce qui se passe ici?
Réponses:
$PATH
est évalué par votre shell, votre chèque ne fonctionne donc pas comme prévu./etc/sudoers
est configuré pour remplacer votrePATH
par un par défaut.sudo
ne charge pas d’environnement shell de connexion avant d’exécuter la commande, la valeurPATH
par défaut de/etc/sudoers
est utilisée.su -
ouvre un shell de connexion, ce qui implique le chargement/etc/profile
. Voir laman bash
section INVOCATION .Il suffit de retirer la
PATH
réinitialisation dans/etc/sudoers
. C'est probablement une règle appeléesecure_path
.CentOS
Dans CentOS, vous pouvez ajouter
PATH
à laDefaults env_keep
section:la source
sudo: ./<some_binary>: command not found
. J'utilise Arch Linux.Donnez
sudo
votre courantPATH
avec:la source
-E
option en plus pour préserver le reste de l'environnement. En fait, c’est tellement pratique qu’il peut être placé dans un script / alias / fonction pour une utilisation facile. Je vais ajouter ceci en tant que réponse séparée - mais bravo à @opyate!env: cmd: No such file or directory
une idée - Pourquoi ce serait?sudo: ./<some_binary>: command not found
. J'utilise Arch Linux.En développant la réponse de @ opyate, j'utilise le script shell suivant (qui peut être nommé
mysudo
, par exemple):-E
ditsudo
de préserver l'environnement.env "PATH=$PATH"
est étendu en dehors de l’sudo
appel, ce qui rend l’extérieurPATH
disponible à l’intérieur de celui-cisudo
(ceci est nécessaire en plus du fait-E
qu’ilPATH
reçoit habituellement un traitement spécial en plus du traitement que reçoit l’ensemble de l’environnement)."$@"
passe les arguments que notre script reçoit à lasudo
ligne.Enregistrez le script dans un fichier d'un répertoire de
PATH
, donnez-lui les+x
autorisations nécessaires, et le tour est joué.la source
Comme les réponses actuelles sont un peu vagues, le paramètre spécifique pour
/etc/sudoers
changer de chemin est le suivantsecure_path
:Vous pouvez le modifier avec
sudo visudo
, ou mieux encore, ajouter les répertoires dont vous avez besoin:la source
J'ai eu le même problème lorsque j'ai installé Maven pour la première fois . Le problème a été résolu après avoir ajouté les deux lignes,
à quatre fichiers:
et pour l'utilisateur actuel (
mehran
mon nom d'utilisateur Ubuntu):la source
Vous devez modifier la variable PATH de la racine exactement comme vous l'avez fait pour vous, c'est- à- dire en ajoutant ces deux lignes dans le profil de sudo, situé dans /root/.bashrc, puis en le source.
la source
sudo source /root/.bashrc
obtient:sudo: source: command not found
et sans l'sudo
autorisation, l'autorisation est refusée (comme prévu). Je pense que le démarrage d'un nouveau terminal devrait en principe faire la même chose que la source, mais après le démarrage d'un nouveau terminal,sudo mvn --version
ne trouve toujours rien.