Тире (-) перед ударом


14

Якщо я досліджую мою Баш оболонки як OS X (10.6.4) терміналу, наприклад, шляхом введенням echo $0, є тир перед моєю оболонкою, як це: -bash. Що означає ця тире?

Відповіді:


14

Це означає, що 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)перейти до домашнього каталогу користувача. . За замовчуванням - додати дефіс (це сеанс входу).


Чудова відповідь, дякую за пояснення та manцитує
marshall.ward

1
Я використовую ubuntu, і я бачу різні способи поведінки echo $0: якщо я echo $0набираю термінал, на який викликається ctrl + alt + f1, результат -bash; але якщо я введіть його у termianl, на який посилається ctrl + alt + t, результат є bash(відсутність провідної тире). Чи можете ви пояснити, чому?
Заморожене полум'я

@ Заморожене полум'я Одне є оболонкою для входу, інше - ні. Зауважте, що термінали OS X Terminal та Linux мають в цьому відношенні різні поведінки.
Даніель Бек

@DanielBeck - це не доказ того, що інша не оболонка для входу. Коли bash запускається з --loginаргументом, він не змінює його argv[0], але виконує функцію оболонки входу.
Руслан

@ Руслан Звичайно, теоретично це все ще може бути оболонкою для входу. Але це не так. (Принаймні, я був би надзвичайно здивований, якби це було.)
Даніель Бек
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.