Если я исследую мою Баш оболочки в качестве 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)
в домашний каталог пользователя. , По умолчанию добавляется дефис (это сеанс входа в систему).
man
цитируюecho $0
: если я наберуecho $0
в терминале, вызванномctrl + alt + f1
, результат-bash
; но если я наберу это в termianl, вызванномctrl + alt + t
, результат будетbash
(без начального тире). Не могли бы вы объяснить, почему?--login
аргументом, он не меняет егоargv[0]
, но действует как оболочка входа.