.bashrcэто файл конфигурации bash, только когда он выполняется в интерактивном режиме. Он загружается только при запуске bash, а не при запуске какой-либо другой программы, например sh(даже если bash вызывается через имя sh). И он загружается только тогда, когда bash является интерактивным, а не когда он выполняет скрипт или команду с помощью -c.
sudo sh -c 'echo $PATH'или sudo bash -c 'echo $PATH'не вызывает интерактивную оболочку, поэтому .bashrcне участвует.
sudo su; echo $PATHзапускает интерактивный экземпляр оболочки root. Если это bash, то ~root/.bashrcзагружается. Этот фрагмент кода выполняется echo $PATHпосле завершения работы интерактивной оболочки, поэтому все, что происходит в интерактивной оболочке, не влияет на то, что выводит фрагмент в конце. Но если вы наберете echo $PATHпо приглашению интерактивной оболочки, запущенной с sudo su, вы увидите значение, установленное ~root/.bashrc.
Поскольку .bashrcвызывается в каждой интерактивной оболочке, а не в оболочках входа в систему (даже не в интерактивных оболочках входа в систему, что является дефектом проектирования в bash), это неправильное место для определения переменных среды. Используйте .bashrcдля интерактивных настроек bash, таких как привязки клавиш, псевдонимы и настройки завершения. Установите переменные среды в файлах, которые загружаются при входе в систему: ~/.pam_environmentили ~/.profile.
Так установлено PATHв .profileвместо .bashrc, и либо запустить оболочку входа в систему с sudo -i 'echo $PATH', или в явном виде источника .profileс sudo sh -c '. ~/.profile; echo $PATH'.