009.配置文件定制bash

在命令行中输入的绝大部分命令都可以放置在一个特殊的文件中,留待登录或启动新的bash会话时执行。将函数定义、别名以及环境变量设置放置在这种特殊文件中,是一种定制shell的常用方法。

复制代码
# 定义ls命令使用的颜色
LS_COLORS='no=00:di=01;46:ln=00;36:pi=40;33:so=00;35:bd=40;33;01'
export LS_COLORS

# 主提示符
PS1='Hello $USER'; export PS1

# 正常路径之外的个人应用程序安装目录
PATH=$PATH:/opt/MySpecialApplication/bin; export PATH

# 常用命令的便捷方式
function lc () {/bin/ls -C $* ; }

Linux和Unix中能够放置定制脚本的文件不止一个。这些配置文件分为3类:登录时执行的、启动交互式shell时执行的以及调用shell处理脚本文件时执行的。

当用户登录shell时,会执行下列文件:

复制代码
/etc/profile, $HOME/.profile, $HOME/.bash_login, $HOME/.bash_profile /
  • **注意:**如果你是通过图形化登录管理器登入的话,是不会执行/etc/profile、HOME/.profile和HOME/.bash_profile这3个文件的。这是因为图形化窗口管理器并不会启动shell。当你打开终端窗口时才会创建shell,但这个shell也不是登录shell。
  • 如果.bash_profile或.bash_login文件存在,则不会去读取.profile文件。

交互式shell(如X11终端会话)或ssh执行单条命令(如ssh 192.168.1.1 ls /tmp)时,会读取并执行以下文件:

复制代码
/etc/bash.bashrc $HOME/.bashrc

如果运行如下脚本:

复制代码
#!/bin/bash

echo "Running

不会执行任何配置文件,除非定义了环境变量BASH_ENV:

复制代码
export BASH_ENV=~/.bashrc
./myscript.sh

使用ssh运行下列命令时:

复制代码
ssh 192.168.1.100 ls /tmp
  • 会启动一个bash shell,读取并执行/etc/bash.bashrc和$HOME/.bashrc,但不包括/etc/profile或.profile。

如果调用ssh登录会话:ssh 192.168.1.100

这会创建一个新的登录bash shell,该shell会读取并执行以下文件:

复制代码
/etc/profile
/etc/bash.bashrc
$HOME/.profile or .bashrc_profile

**危险:**像传统的Bourne shell、ash、dash以及ksh这类shell,也会读取配置文件。但是这些shell并不支持线性数组(列表)和关联数组。因此要避免在/etc/profile或$HOME/.profile中使用这类不支持的特性。

可以使用这些文件定义所有用户所需要的非导出项(如别名)。例如:

复制代码
alias l "ls -l"

/etc/bash.bashrc /etc/bashrc

也可以用来保存个人配置,比如设置需要由其他bash实例继承的路径信息,就像下面这样:

复制代码
CLASSPATH=$CLASSPATH:$HOME/MyJavaProject; export CLASSPATH
$HOME/.bash_login $HOME/.bash_profile $HOME/.profile
  • 如果.bash_login或.bash_profile存在,则不会读取.profile。不过其他shell可能会读取该文件。

另外还可以保存一些需要在新shell创建时定义的个人信息。如果你希望在X11终端会话中能够使用别名和函数的话,可以将其定义在$HOME/.bashrc和/etc/bash.bashrc中。

导出变量和函数会传递到子shell中,但是别名不会。你必须将BASH_ENV的值设置为.bashrc或.profile,然后在其中定义别名,这样就可以在shell脚本中使用这些别名了。

当用户登出会话时,会执行下列文件:

复制代码
	$HOME/.bash_logout

例如,远程登录的用户需要在登出的时候清屏:

复制代码
cat ~/.bash_logout
# 远程登出之后清屏
Clear
相关推荐
vortex521 小时前
进程管理器大横评:从 PM2 到 Systemd 的选型与实战
linux·shell·进程管理
Irene19913 天前
Shell 相关基础入门,在 Ubuntu 与 CentOS Shell 中的语法差异总结(bash、dash、sh)
shell
小肝一下3 天前
5. 基础IO
android·linux·shell·基础io·操作系统底层·伊涅夫·伊雷娜
红茶要加冰5 天前
七、正则表达式
linux·运维·正则表达式·shell
lifewange5 天前
WSL安装问题解决
shell
AdCj35 天前
放弃第三方框架,用系统自带工具玩转 Shell 测试
shell·测试
红茶要加冰5 天前
九、文本处理三剑客——sed
linux·运维·服务器·正则表达式·shell
红茶要加冰6 天前
五、流程控制之循环
linux·运维·shell
红茶要加冰6 天前
二、shell中的变量
linux·运维·shell
Irene19916 天前
大数据开发(Hadoop/Spark 生态)在 Ubuntu 环境下:5 个高频率使用的功能性 Shell 脚本
shell