当您在 Linux 机器上按下 [ALT+F1...F6] 时,您通常会看到“虚拟终端”。当我通过 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
当你的计算机启动时,它开始在里面并检查文件(例如/etc/inittab
)以查找要启动的进程。通常此文件包含几行,如下所示。
c5:5:respawn:/sbin/agetty 57600 tty2 xterm-256color
粗略翻译:
在运行级别 5(多用户模式)下,在控制台 2(ALT-F2)上启动 agetty(登录进程)。如果进程终止(例如,在您注销后),则启动一个新进程(respawn)。
如果你登录该agetty,那么你将启动一个登录shell。这可以是bash。它可以是另一个 shell. (您可以使用 设置默认 shell chsh
)。
如果你将 bash 配置为默认 shell,那么它将启动 bash 并查找这些位置:(注意,在调用 bash 时会检查这些文件特别是作为登录 shell)
- /etc/配置文件
- 的〜/ .bash_profile
- 〜/ .bash_login
- 〜/ .profile
如您所见,这包括您之前提到的 $HOME/.profile,但不包括 $HOME/.bashrc
在这种情况下,非登录 shell,bash 检查/etc/bashrc
和~/.bashrc
。
bash -l
我认为最后一部分回答了你的问题。(用或 测试bash --login
)。