У Linux та, наскільки мені відомо, всі системи Unix, емулятори терміналів за замовчуванням працюють інтерактивні оболонки без входу. Це означає, що для bash, запущена оболонка:
Коли запускається інтерактивна оболонка, яка не є оболонкою для входу, bash зчитує та виконує команди з
/etc/bash.bashrc
та~/.bashrc
, якщо ці файли існують. Це може бути пригнічено за допомогою--norc
параметра.Параметр
--rcfile
файлу змусить bash читати та виконувати команди з файлу замість/etc/bash.bashrc
та~/.bashrc
.
А для оболонок для входу:
Коли bash викликається як інтерактивна оболонка для входу, або як неінтерактивна оболонка з
--login
можливістю, вона спочатку зчитує та виконує команди з файлу/etc/profile
, якщо такий файл існує. Після прочитання цього файлу, він шукає~/.bash_profile
,~/.bash_login
і~/.profile
, в такому порядку, і читає і виконує команду з першого, який існує і читаються.
--noprofile
Варіант може бути використаний , коли оболонка запускається , щоб пригнічувати таку поведінку.
Однак у OSX оболонка за замовчуванням (що є bash), запущена в терміналі за замовчуванням (Terminal.app), фактично є джерелом ~/.bash_profile
або ~.profile
іншим словом. Іншими словами, вона діє як оболонка входу.
Основне питання : Чому інтерактивна оболонка за замовчуванням оболонка для входу в OSX? Чому OSX вирішив це зробити? Це означає, що всі інструкції / підручники для речей на основі оболонок, в яких згадується зміна речей, ~/.bashrc
вийдуть з ладу на OSX або навпаки ~/.profile
. Тим не менш, хоча багато звинувачень можна вирівняти в Apple, наймання некомпетентних або ідіотських розрядів - це не одне з них. Імовірно, у них були вагомі причини для цього, так чому?
Підпитання: Чи реально запускає Terminal.app інтерактивну оболонку входу або вони змінили поведінку bash? Це специфічно для Terminal.app чи він не залежить від емулятора терміналу?