bash/zsh, а конкретно их типы: login, non-login, interactive, restricted и т.п.Очередной зоопарк с которым особо никто не разбирается. Давай закроем эту дырку. ㅤ
Interactive Shell — ну тут ежу понятно, ты вводишь в терминале буковки, а оно тебе в ответ что-то выдаёт. Интерактивно? Конечно! По умолчанию именно этот тип стартует при запуске терминала.
На этом можно и закончить, но хуй там плавал, поехали дальше.
Non-Interactive — Логично? Логично! Этот тип используется в основном для выполнения скриптов или задач в кроне.
Когда ты запускаешь скрипт:
./bashdays.sh, интерактивная оболочка смотрит в скрипт и такая — ага, вижу shebang (#!/bin/sh) Запускаю интерпретатор sh.Это и будет считаться не интерактивной оболочкой, все запустится где-то там внутри, в кишках.
Что интересно, при запуске в такой оболочке все твои настройки в .profile/.bashrc игнорируются.
Почему? Из-за совместимости, вдруг ты в
.bashrc нахуячил своих переменных и команд, а потом решил этот скрипт перенести на другую машину где нет этих переменных и команд. Такие дела.И в большинстве случаев здесь кроется проблема с выполнением скрипта из крона. Ручками запускаешь — работает. А из крона — нет! Потому что проигнорированы твои поделки в
.bashrc и profile.Как вариант, пиши
#!/bin/bash или в кроне явно указывай как запускать твой скрипт: bash script.shLogin = Запускается при входе в систему (например через ssh). Оболочка входа перечитывает файлы:
/etc/profile, ~/.bash_profile, ~/.bash_login, ~/.profile.Чтобы определить текущий тип оболочки, запусти команду:
echo $0
Если вывод начинается со знака «-» это и есть login shell.
Ну или так:
[[ $- == *i* ]] && echo "Interactive" || echo "Non-Interactive"
Non-Login = запускается из существующей сессии (например, внутри терминала из GUI). То есть не требуется авторизация. Не читает
~/.bash_profile вместо этого использует ~/.bashrc. Нипонятно… давай на примере:
1. Ты приходишь домой с работы.
2. Зашел через парадную дверь Login Shell.
3. Снимаешь трусы, всё происходит по определённым правилам (файл
.bash_profile).Что происходит:
- Ты готов к долгому пребыванию дома.
- Тебя «встречают» файлы конфигурации входа (
.bash_profile).4. Ты внутри дома, и открываешь окно, чтобы покурить.
5. Non-Login Shell = это как открыть окно внутри дома.
6. Ты не снимаешь трусы заново — ты уже дома!
Файлы
.bash_profile не используются, потому что ты уже «внутри». Вместо этого, ты используешь «внутренние» правила дома (это как .bashrc).Login Shell: Зашёл в дом через дверь — загружается
.bash_profile.Non-Login Shell: Открыл окно, уже находясь в доме — загружается
.bashrc.Restricted Shell = ограниченная оболочка, кастрированные команды, закрученные гайки. Обычно делают для безопасности, чтобы криворукий юзер ничо не сломал.
Возможно ты слышал про rbash, это оно и есть.
System Shell = системная оболочка, используется системой для выполнения фоновых задач и скриптов инициализации (
init, systemd). Зачастую это /bin/sh.Subshell = Подоболочка, создается при выполнении скрипта или команд в скобках () или с помощью
bash -c. Подоболочка наследует переменные родительской оболочки, но не влияет на них после завершения.Например:
(cd /tmp && ls)Есть еще Interactive Login, Interactive Non-Login.
1. Интерактивная оболочка, которая требует входа пользователя (например, через SSH).
2. Интерактивная оболочка, открытая из GUI терминала, но не требует аутентификации пользователя.
➡️ Почитать про shebang
➡️ Почитать про файлы .profile/bashrc и т.п.
—
Да и вроде всё, закончился зоопарк, по крайней мере про другие типа оболочек я не слышал, либо забыл нахуй.
Напиши в комменты если что-то можно сюда еще приплести, будет интересно.
Увидимся! Шестидневная рабочая неделька обещает быть томной.
tags: #linux
—
🔔 @bashdays➡️ @gitgate