Если я исследую мою Баш оболочки в качестве 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цитирую