linux---Shell-4----bash启动脚本
2013-05-30 21:42
309 查看
bash启动脚本
启动脚本是bash启动时自动执行的脚本。用户可以把一些环境变量和alias、umask设置放在启动脚本中,这样,每次启动bash的时候,这些设置就自动生效了。
启动bash的方法不同,执行启动脚本的步骤也不同.
1. 作为交互式登录的bash启动或者使用--login参数启动
交互式Shell是指用户在提示符下输入命令的Shell而非执行脚本的Shell,登录Shell就是在输入用户名和密码登录后得到的Shell, 但是从图形界面窗口管理器登录之后会显示桌面而不会产生登录Shell,也不会执行启动脚本, 在图形界面下打开终端窗口得到的Shell也不是登录Shell。
这样启动bash会自动执行以下脚本:
首先执行/etc/profile,系统中每个用户登录时都要执行这个脚本,如果系统管理员希望某个设置对所有用户都生效,可以写在这个脚本里
然后依次查找当前用户主目录的~/.bash_profile, 、~/.bash_login和~/.profile三个文件, 找到第一个存在并且可读的文件来执行, 如果希望某个设置只对当前用户生效, 可以写在这个脚本里.由于这个脚本在/etc/profile之后执行, /etc/profile设置的一些环境变量的值在这个脚本中可以修改, 也就是说,当前用户的设置可以覆盖(Override)系统中全局的设置。。~/.profile这个启动脚本是sh规定的,bash规定首先查找以~/.bash_开头的启动脚本,如果没有则执行~/.profile,是为了和sh保持一致。
顺便一提,在退出登录时会执行~/.bash_logout脚本(如果它存在的话)。
2> 以交互非登录Shell启动
比如在图形界面下开一个终端窗口,或者在登录Shell提示符下再输入bash命令,就得到一个交互非登录的Shell,这种Shell在启动时自动执行~/.bashrc脚本。
为了使登录Shell也能自动执行~/.bashrc,通常在~/.bash_profile中调用~/.bashrc:
---------------------------------------------------
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
---------------------------------------------------
为什么登录Shell和非登录Shell的启动脚本要区分开呢?
最初的设计是这样考虑的,如果从字符终端或者远程登录,那么登录Shell是该用户的所有其它进程的父进程,也是其它子Shell的父进程,所以环境变量在登录Shell的启动脚本里设置一次就可以自动带到其它非登录Shell里,而Shell的本地变量、函数、alias等设置没有办法带到子Shell里,需要每次启动非登录Shell时设置一遍,所以就需要有非登录Shell的启动脚本,所以一般来说在~/.bash_profile里设置环境变量,在~/.bashrc里设置本地变量、函数、alias等。如果你的Linux带有图形系统则不能这样设置,由于从图形界面的窗口管理器登录并不会产生登录Shell,所以环境变量也应该在~/.bashrc里设置。
3> 非交互式登录
为执行脚本而fork出来的子Shell是非交互Shell,启动时执行的脚本文件由环境变量BASH_ENV定义,相当于自动执行以下命令:
--------------------------------------------------
if [ -n "$BASH_ENV" ]; then
. "$BASH_ENV";
fi
--------------------------------------------------
4> 以Shell命令启动
如果以sh命令启动bash,bash将模拟sh的行为, 以~/.bash_开头的那些启动脚本就不认了。
所以,如果作为交互登录Shell启动,或者使用--login参数启动,则依次执行以下脚本:
/etc/profile
~/.profile
如果作为交互Shell启动,相当于自动执行以下命令:
if [ -n "$ENV" ]; then . "$ENV"; fi
如果作为非交互Shell启动,则不执行任何启动脚本。通常我们写的Shell脚本都以#! /bin/sh开
头,都属于这种方式。
相关文章推荐
- ./ . 和#!/bin/bash 辨析Linux如何选择当前执行脚本的shell
- linux自动装载Windows下的分区以及bash启动脚本自定义命令
- linux环境java应用通用启动shell脚本
- Linux bash shell脚本语法入门
- Linux下shell脚本启动jar包
- Linux 下shell启动Java Main函数脚本
- linux自动装载Windows下的分区以及bash启动脚本自定义命令
- Linux 下 Redis 服务 Shell启动脚本
- Windows下记事本编辑的Shell脚本放到Linux下执行出错,格式问题(/bin/bash^M: bad interpreter: 没有那个文件或目录)
- (转)Linux bash shell脚本语法入门
- linux设置shell脚本开机启动
- Linux学习笔记:bash特性之多命令执行,shell脚本
- linux 远程执行 shell脚本中nohup启动注意
- Linux 开机启动的 执行rc脚本(shell编写)的顺序
- Linux_Shell druid.io 集群启动脚本
- Linux的shell脚本LvsDR模式启动脚本和模拟keepalived高可用脚本
- Linux脚本编程:Bash shell脚本的大括号
- linux环境下编写shell脚本启动和关闭jar包服务程序
- Linux的shell脚本的语句,函数,检测服务,启动脚本的练习