用户每次使用 Shell,都会开启一个与 Shell 的 Session(对话)。
Session 有两种类型:登录 Session 和非登录 Session,也可以叫做 login shell 和 non-login shell。
登录 Session 是用户登录系统以后,系统为用户开启的原始 Session,通常需要用户输入用户名和密码进行登录。
登录 Session 一般进行整个系统环境的初始化,启动的初始化脚本依次如下。
/etc/profile
/etc/profile.d
.sh
~/.bash_profile
~/.bash_login
~/.profile
Linux 发行版更新的时候,会更新/etc里面的文件,比如/etc/profile,因此不要直接修改这个文件。如果想修改所有用户的登陆环境,就在/etc/profile.d目录里面新建.sh脚本。
/etc
如果想修改你个人的登录环境,一般是写在~/.bash_profile里面。下面是一个典型的.bash_profile文件。
.bash_profile
# .bash_profile PATH=/sbin:/usr/sbin:/bin:/usr/bin:/usr/local/bin PATH=$PATH:$HOME/bin SHELL=/bin/bash MANPATH=/usr/man:/usr/X11/man EDITOR=/usr/bin/vi PS1='\h:\w\$ ' PS2='> ' if [ -f ~/.bashrc ]; then . ~/.bashrc fi export PATH export EDITOR
可以看到,这个脚本定义了一些最基本的环境变量,然后执行了~/.bashrc。
~/.bashrc
bash命令的--login参数,会强制执行登录 Session 会执行的脚本。
bash
--login
$ bash --login
bash命令的--noprofile参数,会跳过上面这些 Profile 脚本。
--noprofile
$ bash --noprofile
非登录 Session 是用户进入系统以后,手动新建的 Session,这时不会进行环境初始化。比如,在命令行执行bash命令,就会新建一个非登录 Session。
非登录 Session 的初始化脚本依次如下。
/etc/bash.bashrc
对用户来说,~/.bashrc通常是最重要的脚本。非登录 Session 默认会执行它,而登陆 Session 一般也会通过调用执行它。由于每次执行 Bash 脚本,都会新建一个非登录 Session,所以~/.bashrc也是每次执行脚本都会执行的。
bash命令的--norc参数,可以禁止在非登录 Session 执行~/.bashrc脚本。
--norc
$ bash --norc
bash命令的--rcfile参数,指定另一个脚本代替.bashrc。
--rcfile
.bashrc
$ bash --rcfile testrc
~/.bash_logout脚本在每次退出 Session 时执行,通常用来做一些清理工作和记录工作,比如删除临时文件,记录用户在本次 Session 花费的时间。
~/.bash_logout
如果没有退出时要执行的命令,这个文件也可以不存在。
为了方便 Debug,有时在启动 Bash 的时候,可以加上启动参数。
-n
-v
-x
$ bash -n scriptname $ bash -v scriptname $ bash -x scriptname
Bash 允许用户定义自己的快捷键。全局的键盘绑定文件默认为/etc/inputrc,你可以在主目录创建自己的键盘绑定文件.inputrc文件。如果定义了这个文件,需要在其中加入下面这行,保证全局绑定不会被遗漏。
/etc/inputrc
.inputrc
$include /etc/inputrc
.inputrc文件里面的快捷键,可以像这样定义,"\C-t":"pwd\n"表示将Ctrl + t绑定为运行pwd命令。
"\C-t":"pwd\n"
Ctrl + t
pwd
Copyright© 2013-2020
All Rights Reserved 京ICP备2023019179号-8