Я знаю, echo $0
возвращает, в какой оболочке я нахожусь, но когда я запускаю $0
в терминале, он ничего не возвращает.
Поскольку $0
содержит команду оболочки, которая запуск сценария оболочки или интерактивного сеанса; когда вы набираете $0
в терминале, вы вызываете имя команды в переменной аргумента $0
.
Когда $0
содержит bash
; Набрав $0
в терминале, вы просто наберете bash
. Затем он запускает другой bash в рамках первого в качестве под-оболочки.
Когда он запускает другую оболочку, похоже, что он ничего не сделал, но запустил другой сеанс оболочки с теми же переменными среды и настройки. Приглашение оболочки и текущий каталог точно такие же, поэтому похоже, что ничего не произошло.
Если вы затем попытаетесь закрыть окно терминала, когда была вызвана суб-оболочка, она сообщит вам, что все еще есть фоновые процессы выполняются.
Когда вы закрываете окно терминала, происходит следующее: он сигнализирует об окончании работы первой оболочки более высокого уровня P
rocess ID
, но эта оболочка PID
знает, что у нее есть дочерний элемент PID
все еще прикреплен и просто сообщает вам об этом.