Когда вы нажимаете [ALT+F1 ...F6] на машине с Linux Обычно вы видите "виртуальный терминал". Когда я вхожу через виртуальный терминал на моей машине Debian - bash не реализует настройки из файлов $ HOME/.bashrc и $ HOME/.profile! Какой файл я должен использовать для установки настроек bash для виртуального терминала?

Я попытался отладить это:

    $ strace  -e open  bash --login 2>&1 | grep -P "\.bash|profile"

    open("/etc/profile", O_RDONLY|O_LARGEFILE) = 3
    open("/etc/profile.d/", O_RDONLY|O_NONBLOCK|O_LARGEFILE|O_DIRECTORY|O_CLOEXEC) = 3
    open("/etc/profile.d/bash_completion.sh", O_RDONLY|O_LARGEFILE) = 3
    open("/home/ruslan/.bash_profile", O_RDONLY|O_LARGEFILE) = -1 ENOENT (No such file or directory)
    open("/home/ruslan/.bash_login", O_RDONLY|O_LARGEFILE) = 3
    exit
    open("/home/ruslan/.bash_logout", O_RDONLY|O_LARGEFILE) = 3
    open("/etc/bash.bash_logout", O_RDONLY|O_LARGEFILE) = -1 ENOENT (No such file or directory)

~/.profile - нет!

1 ответ1

2

Когда ваш компьютер загружается, он запускает init и проверяет файл (например, /etc/inittab) для запуска процессов. Обычно этот файл содержит несколько строк, как показано ниже.

c5:5:respawn:/sbin/agetty 57600 tty2 xterm-256color

Вольный перевод:
На уровне выполнения 5 (многопользовательский режим) запустите agetty (процесс входа в систему) на консоли 2 (ALT-F2). Если процесс умирает (например, после выхода из системы), начните новый (респаун).

Если вы войдете в систему с этим agetty, то запустите оболочку входа. Это может быть Баш. Это может быть другая оболочка. (Вы можете установить оболочку по умолчанию с помощью chsh).

Если вы настроили bash в качестве оболочки по умолчанию, то она запустит bash и будет искать в этих местах: (обратите внимание, что эти файлы проверяются, когда bash вызывается именно как оболочка для входа)

  • / И т.д. / профиль
  • ~ / .Bash_profile
  • ~ / .Bash_login
  • ~ / .Profile

Как вы можете видеть, это включает $ HOME/.profile, который вы упомянули ранее, но не $ HOME/.bashrc

В этом случае интерактивной, но не входящей в систему оболочки, bash проверяет /etc/bashrc и ~/.bashrc .


Я подозреваю, что последняя часть отвечает на ваш вопрос. (Проверьте это с помощью bash -l или bash --login).

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .