Якщо я досліджую мою Баш оболонки як OS X (10.6.4) терміналу, наприклад, шляхом введенням echo $0
, є тир перед моєю оболонкою, як це: -bash
. Що означає ця тире?
Якщо я досліджую мою Баш оболонки як OS X (10.6.4) терміналу, наприклад, шляхом введенням echo $0
, є тир перед моєю оболонкою, як це: -bash
. Що означає ця тире?
Відповіді:
Це означає, що bash
викликається оболонкою для входу.
man bash
каже:
Оболонка входу - це той, чий перший символ нульового аргументу - це а
-
, або розпочато з--login
параметра.Коли bash викликається як інтерактивна оболонка входу, або як неінтерактивна оболонка з
--login
можливістю, вона спочатку зчитує та виконує команди з файлу/etc/profile
, якщо такий файл існує. Після прочитання цього файлу, він шукає~/.bash_profile
,~/.bash_login
і~/.profile
, в такому порядку, і читає і виконує команду з першого, який існує і читаються.--noprofile
Варіант може бути використаний , коли оболонка запускається , щоб пригнічувати таку поведінку.Коли оболонка входу виходить, bash зчитує та виконує команди з файлу
~/.bash_logout
, якщо він існує.
Ви знайдете login -pf
у своєму ps
висновку, який за замовчуванням запускає оболонку входу.
Спробуйте запустити login -pf
і login -pfl
побачити різницю. man login
описує різницю:
-l
Повідомляє програмі, виконаній за допомогою входу, що це не сеанс входу (за умовою, сеанс входу передається програмі з дефісом як перший символ символуargv[0]
; ця опція вимикає цю функцію) і не дозволяє їйchdir(2)
перейти до домашнього каталогу користувача. . За замовчуванням - додати дефіс (це сеанс входу).
echo $0
: якщо я echo $0
набираю термінал, на який викликається ctrl + alt + f1
, результат -bash
; але якщо я введіть його у termianl, на який посилається ctrl + alt + t
, результат є bash
(відсутність провідної тире). Чи можете ви пояснити, чому?
--login
аргументом, він не змінює його argv[0]
, але виконує функцію оболонки входу.
man
цитує