При попытке запустить sudo с помощью mvn, например. 'sudo mvn spring-boot:run', в WSL (Ubuntu 24) я получаю следующую ошибку: 'sudo: mvn: command not found'.
Очевидно, что maven установлен и отлично работает без sudo. Кроме того, запуск sudo с другими командами также работает нормально, например. sudo apt-get update и т. д.
Просто чтобы исключить любые вопросы, почему я пытаюсь запустить 'sudo mvn spring-boot:run', это то, что когда я запускал его без sudo, мое приложение SpringBoot аварийно завершает работу с 'java.net.BindException: Permission denied', вероятно, на порту 80, хотя трассировка стека ошибок не говорит об этом (в application.preperties, server.port=80 и порт не используется, т. е. sudo lsof -i:80 ничего не показывает).
Вышеупомянутая ошибка отказа в доступе возникает как на моем экземпляре WSL, так и на моем экземпляре AWS EC2 (который также использует Ubuntu 24), но я могу преодолеть ее в EC2 с помощью sudo, но я не могу сделать то же самое в WSL.
Был бы благодарен за любые предложения.
@tripleee, из моего ОП: The error (т. е. BindException: разрешение отклонено) happens on both my WSL and my AWS EC2 instance (which also uses Ubuntu 24), but the way I overcome it on EC2 is by using sudo, but I can't do the same on WSL.
Можете ли вы опубликовать результат type mvn и sudo bash -c 'echo $PATH'?
@tripleee, как вы упомянули, WSL использовал maven, установленный в Windows, поэтому я попытался добавить каталог maven в PATH, как вы предложили в сообщении SO. Однако по какой-то причине новый путь сохраняется только в его части «Windows» (где он уже был установлен), но не в части Linux: $ sudo bash -c 'export PATH=$PATH:/mnt/c/system/apache-maven-3.9.6/bin' $ sudo bash -c 'echo $PATH' $ /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin $ export PATH=$PATH:/mnt/c/system/apache-maven-3.9.6/bin $ echo $PATH ...:/mnt/c/system/apache-maven-3.9.6/bin Установка PATH в bashrc приводит к тому же результату.
@Philippe $ type mvn $ mvn is /mnt/c/system/apache-maven-3.9.6/bin/mvn $ sudo bash -c 'echo $PATH' $ /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/binпосмотри также мой ответ на тройку
Можешь попробовать sudo -E mvn spring-boot:run ?
@Philippe, к сожалению, не помогло, т. е. все еще получаю: sudo: mvn: command not found
Если вы не можете или не хотите обновлять PATH, укажите полный путь к mvn; sudo /mnt/c/system/apache-maven-3.9.6/bin/mvn spring-boot:run
Спасибо, это сработало. Я бы предпочел использовать решение Филиппа.




Если у вас есть в /etc/sudoers:
Defaults secure_path = "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin"
Попробуйте добавить каталог maven:
Defaults secure_path = "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin:/mnt/c/system/apache-maven-3.9.6/bin"
Почему вы хотите запустить
mvnподsudo?