.bashrc- це файл конфігурації bash, лише коли він виконується інтерактивно. Він завантажується лише під час запуску bash, а не під час запуску якоїсь іншої програми (наприклад, shнавіть якщо bash викликається через ім'я sh). І завантажується лише тоді, коли bash є інтерактивним, а не тоді, коли він виконує скрипт чи команду -c.
sudo sh -c 'echo $PATH'або sudo bash -c 'echo $PATH'не викликає інтерактивну оболонку, тому .bashrcне бере участь.
sudo su; echo $PATHзапускає інтерактивний екземпляр оболонки кореня. Якщо це баш, то ~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'.