Я открыл терминал в Ubuntu с помощью Ctrl+ Alt+ Tи другого терминала, перейдя в каталог , а затем щелкнув правой кнопкой мыши и выбрав «Открыть в терминале».
Я сделал echo $0
в обоих случаях.
В первом случае:
$ echo $0
-bash
Во втором случае:
$ echo $0
/bin/bash
Почему эта разница?
bash
ubuntu
terminal
gnome-terminal
CodeBlue
источник
источник
Ответы:
Если вывод
echo $0
команды --bash
это означает, что онbash
был вызван как оболочка входа в систему. Если вывод толькоbash
, то вы находитесь в оболочке без входа в систему.man bash
говорит где-то в строке 126:Подробнее об этом здесь: Разница между Оболочкой входа в систему и Оболочкой без регистрации? ,
Теперь, чтобы объяснить, почему вы попали
/bin/bash
во второй случай, я могу сказать, что программа (в вашем случае ваш файловый менеджер, возможно, nautilus) или сценарий может изменить свою собственную$0
на что-то другое. В качестве примера посмотрите, что происходит с$0
моим терминалом (все время одним и тем же терминалом):источник
Разница заключается в том, как они были начаты. bash будет инициализироваться по-разному (читать различные сценарии запуска) в зависимости от argv [0]. Если строка начинается с дефиса,
-
как в,-bash
то она запускается как оболочка входа в систему, если нет, она запускается как интерактивная оболочка. Он также может работать как неинтерактивная оболочка (т.е. в сценарии оболочки).Чтобы узнать больше, лучше прочитать руководство,
man bash
раздел «ПРИЗНАНИЕ».источник
Оболочка запускается при входе, но он также начал программы , как
make
, или при выполнении сценария оболочки, или при вводе:sh
вvi
или при создании нового окна терминала.Первоначально оболочка читала,
~/.profile
когда вы входили в систему или работалиsu
. Этот скрипт будет делать такие вещи, как объявление о том, есть ли у вас новая электронная почта, настройка символов стирания и уничтожения, а также установка и экспорт переменных TERM и PATH. При запуске практически в любом другом контексте оболочка не читала~/.profile
, потому что выполнение большинства этих действий было бы излишним. Вы должны были экспортировать любые важные переменные оболочки в новую оболочку.Путь оболочки , знал ли читать в
~/.profile
том , чтобы проверить , является ли первый символargv[0]
ака$0
был'-'
.Начиная с
csh
псевдонимов были введены. Псевдонимы не экспортировались в окружающую среду.csh
был разработан для чтения в двух разных сценариях инициализации.~/.login
был прочитан только тогда, когда пользователь вошел в систему, и сигнал, чтобы сделать это, был, еслиargv[0]
начал с'-'
.~/.cshrc
читался каждый раз при запуске оболочки. В общем, один помещал псевдонимы,~/.cshrc
а все остальное в~/.login
.csh
также поддерживается~/.logout
, который в большинстве случаев просто очистил экран и запустилсяfortune
.Другие оболочки приняли те же функции.
ksh
будет читать~/.kshrc
,bash
будет читать~/.bashrc
, и те были , где бы разместить определения псевдонимов.Короче говоря, приложение, которое порождает оболочку, решает, должна ли она быть «оболочкой входа в систему», в этом случае она есть
'-'
в начале, или обычной оболочкой. В большинстве случаев оболочка, которая будет интерактивной, запускается как оболочка входа в систему, а оболочка, предназначенная просто для запуска некоторых команд, либо в качестве аргументов, либо из сценария, а затем выход - обычная оболочка.Но все зависит от каприза приложения, запускающего оболочку.
источник