Na stronie jest kilka pytań, które wydają się związane z moim problemem, ale nie mogłem znaleźć rozwiązania w żadnym z nich.
Mój system operacyjny to Ubuntu 12.04. Mam mvn
zainstalowany /tools/noarch/apache-maven-3.1.1
i dodałem poniższe linie na końcu mojego /etc/profile
:
export M2_HOME=/tools/noarch/apache-maven-3.1.1
export PATH=$M2_HOME/bin:$PATH
Następnie wykonuję source /etc/profile
.
Teraz mój problem: gdy uruchamiam mvn --version
polecenie powiedzie i mvn
wykonywalny zostanie znaleziony, natomiast jeśli wykonam: sudo mvn --version
mam wyjścia: sudo: mvn: command not found
. Wiem, że PATH
może być inaczej, kiedy wykonuję polecenie sudo
i dlatego próbowałem tego:
$>sudo echo $PATH
/tools/noarch/apache-maven-3.1.1/bin:... some other stuff ...
Inną rzeczą, którą próbowałem, to wykonać, sudo su -
a następnie wpisać mvn --version
. W takim przypadku mvn
udało się znaleźć i polecenie się powiedzie. Co tu się dzieje?
Odpowiedzi:
$PATH
jest oceniany przez powłokę, więc czek nie działa zgodnie z oczekiwaniami./etc/sudoers
jest skonfigurowany do zastąpienia twojegoPATH
domyślnym.sudo
nie ładuje środowiska powłoki logowania przed wykonaniem polecenia, dlatego używana jest domyślna wartośćPATH
z/etc/sudoers
.su -
otwiera powłokę logowania, co wiąże się z ładowaniem/etc/profile
. Patrzman bash
sekcja ZAPROSZENIE .Wystarczy usunąć
PATH
reset w/etc/sudoers
. Prawdopodobnie jest to reguła zwanasecure_path
.CentOS
W CentOS możesz dodać
PATH
doDefaults env_keep
sekcji:źródło
sudo: ./<some_binary>: command not found
. Używam Arch Linux.Daj
sudo
swój prądPATH
dzięki:źródło
-E
opcji, aby zachować resztę środowiska. W rzeczywistości jest to tak poręczne, że można je umieścić w skrypcie / aliasie / funkcji w celu łatwego użycia. Dodam to jako osobną odpowiedź - ale podziękowania dla @opyate!env: cmd: No such file or directory
- jakieś pomysły, dlaczego tak jest?sudo: ./<some_binary>: command not found
. Używam Arch Linux.Pracując nad odpowiedzią @ opyate, używam następującego skryptu powłoki (który może
mysudo
na przykład mieć nazwę ):-E
mówisudo
o ochronie środowiska.env "PATH=$PATH"
jest rozszerzany pozasudo
połączeniem, dzięki czemuPATH
dostępne sąsudo
również elementy zewnętrzne (jest to wymagane oprócz tego,-E
żePATH
zwykle otrzymuje się specjalne leczenie oprócz leczenia, które otrzymuje całe środowisko)."$@"
przekazuje argumenty otrzymane przez nasz skrypt dosudo
wiersza.Zapisz skrypt w pliku w katalogu w
PATH
, daj mu+x
uprawnienia i tak dalej.źródło
Ponieważ obecne odpowiedzi są trochę niejasne, konkretne ustawienie
/etc/sudoers
zmiany ścieżki tosecure_path
:Możesz go zmodyfikować za pomocą
sudo visudo
, lub jeszcze lepiej, dodać potrzebne katalogi:źródło
Miałem ten sam problem, kiedy pierwszy raz zainstalowałem Maven . Problem został rozwiązany po dodaniu dwóch wierszy,
do czterech plików:
i dla bieżącego użytkownika (
mehran
to moja nazwa użytkownika Ubuntu):źródło
Musisz zmodyfikować zmienną PATH root dokładnie tak, jak zrobiłeś to dla siebie, tj. Dodając te dwie linie w profilu sudo, który znajduje się w /root/.bashrc, a następnie ją źródłowo.
źródło
sudo source /root/.bashrc
gets:sudo: source: command not found
i bezsudo
pozwolenia dostaję odmowę (zgodnie z oczekiwaniami). wierzę, że uruchomienie nowego terminalu powinno teoretycznie robić to samo co źródło, ale po uruchomieniu nowego terminalusudo mvn --version
wciąż nic nie znajdzie.