Es gibt ein paar Fragen auf der Website, die mit meinem Problem zusammenhängen, aber ich konnte in keiner eine Lösung finden.
Mein Betriebssystem ist Ubuntu 12.04. Ich habe in mvn
installiert /tools/noarch/apache-maven-3.1.1
und die folgenden Zeilen am Ende von meinem hinzugefügt /etc/profile
:
export M2_HOME=/tools/noarch/apache-maven-3.1.1
export PATH=$M2_HOME/bin:$PATH
Danach führe ich aus source /etc/profile
.
Nun mein Problem ist: wenn ich laufe mvn --version
der Befehl erfolgreich und mvn
ausführbare gefunden wird, während , wenn ich ausführen: sudo mvn --version
ich die Ausgabe bekommen: sudo: mvn: command not found
. Ich weiß, dass PATH
das anders sein kann, wenn ich einen Befehl mit ausführe, sudo
und deshalb habe ich Folgendes versucht:
$>sudo echo $PATH
/tools/noarch/apache-maven-3.1.1/bin:... some other stuff ...
Eine andere Sache, die ich versucht habe, ist auszuführen sudo su -
und dann zu tippen mvn --version
. In diesem Fall mvn
wird erfolgreich gefunden und der Befehl erfolgreich ausgeführt. Was geht hier vor sich?
Antworten:
$PATH
wird von Ihrer Shell ausgewertet, sodass Ihre Prüfung nicht so funktioniert, wie Sie es erwarten./etc/sudoers
ist so konfiguriert, dass sie IhrePATH
durch eine Standardeinstellung ersetzt.sudo
lädt keine Login-Shell-Umgebung, bevor der Befehl ausgeführt wird, daher wird der StandardwertPATH
von/etc/sudoers
verwendet.su -
öffnet eine Login-Shell, die das Laden beinhaltet/etc/profile
. Sieheman bash
Abschnitt INVOCATION .Entfernen Sie einfach den
PATH
Reset in/etc/sudoers
. Es ist wahrscheinlich eine Regel namenssecure_path
.CentOS
In CentOS können Sie
PATH
demDefaults env_keep
Abschnitt Folgendes hinzufügen :quelle
sudo: ./<some_binary>: command not found
. Ich benutze Arch Linux.Geben Sie
sudo
Ihre aktuellePATH
mit:quelle
-E
Option aber auch nutzen , um den Rest der Umwelt zu schonen. Tatsächlich ist dies so praktisch, dass es zur einfachen Verwendung in ein Skript / einen Alias / eine Funktion eingefügt werden kann. Ich werde dies als separate Antwort hinzufügen - aber ein dickes Lob an @opyate!env: cmd: No such file or directory
- Irgendwelche Ideen, warum das so wäre?sudo: ./<some_binary>: command not found
. Ich benutze Arch Linux.Um auf die Antwort von @ opyate einzugehen, verwende ich das folgende Shell-Skript (das
mysudo
zum Beispiel benannt werden kann):-E
sagtsudo
, die Umwelt zu schonen.env "PATH=$PATH"
wird außerhalb dessudo
Anrufs erweitert, um das ExternePATH
auch innerhalb des Anrufs verfügbarsudo
zu machen (dies ist zusätzlich zu-E
derPATH
normalerweise zusätzlich zu der Behandlung, die die gesamte Umgebung erhält, besonderen Behandlung erforderlich )."$@"
Übergibt die Argumente, die unser Skript empfängt, an diesudo
Zeile.Speichern Sie das Skript in einer Datei in einem Verzeichnis in der
PATH
, geben Sie ihm+x
Berechtigungen und Voilà.quelle
Da die aktuellen Antworten etwas vage sind,
/etc/sudoers
lautet die spezifische Einstellung für die Änderung Ihres Pfadessecure_path
:Sie können es ändern
sudo visudo
, indem Sie die gewünschten Verzeichnisse hinzufügen:quelle
Ich hatte das gleiche Problem, als ich Maven zum ersten Mal installierte . Das Problem wurde gelöst, nachdem ich die beiden Zeilen hinzugefügt hatte,
zu vier Dateien:
und für den aktuellen Benutzer (
mehran
ist mein Ubuntu-Benutzername):quelle
Sie müssen die PATH-Variable von root genau so ändern, wie Sie es für sich getan haben, dh indem Sie die beiden Zeilen in sudos Profil in /root/.bashrc hinzufügen und dann als Quelle angeben.
quelle
sudo source /root/.bashrc
gets:sudo: source: command not found
und ohne dassudo
bekomme ich die Erlaubnis verweigert (wie erwartet). Ich glaube, das Starten eines neuen Terminals sollte theoretisch das Gleiche tun wie Source, aber nach dem Starten eines neuen Terminals findet sichsudo mvn --version
immer noch nichts.