■各配置文件
1./etc/profile
系统中每个用户登录时都要执行这个脚本,如果系统管理员希望某个设置对所有用户都生效,可以写在这个文件里
2.~/.bash_profile、~/.bash_login和~/.profile
这些是在当前用户主目录下定义的,其实主要是~/.bash_profile,其他两个一般好像不存在。
[root@localhost sabopeusr0]# ls -a ~
. .. .bash_history .bash_logout .bash_profile .bashrc .cshrc .tcshrc anaconda-ks.cfg
~/.bash_profile,如果希望某个设置只对当前用户生效,可以写在这个文件里。
由于这个脚本在/etc/profile之后执行,/etc/profile设置的一些环境变量的值在这个脚本中可以修改,
也就是说,当前用户的设置可以覆盖(Override)系统中全局的设置。
~/.profile这个启动脚本是sh规定的,bash规定首先查找以~/.bash_开头的启动文件,
如果没有则执行~/.profile,是为了和sh保持一致。
3.~/.bash_logout
在退出登录时会执行~/.bash_logout脚本(如果它存在的话)。
4.~/.bashrc
在图形界面下开一个终端窗口,或者在登录Shell提示符下再输入bash命令,就得到一个交互非登录的Shell。
这种Shell在启动时自动执行~/.bashrc文件并以fork子shell的方式执行,即继承父shell的环境变量,并依据.bashrc来修改,
执行完后本地变量不会保存到父shell中去。
[root@localhost sabopeusr0]# ps -ef|grep -v grep|grep bash
sabopeu+ 8906 8905 0 7月26 pts/2 00:00:00 -bash
root 11223 11222 0 09:41 pts/2 00:00:00 bash
[root@localhost sabopeusr0]# bash
[root@localhost sabopeusr0]# ps -ef|grep -v grep|grep bash
sabopeu+ 8906 8905 0 7月26 pts/2 00:00:00 -bash
root 11223 11222 0 09:41 pts/2 00:00:00 bash
root 11392 11223 0 13:00 pts/2 00:00:00 bash
[root@localhost sabopeusr0]#
有时为了使登录Shell也能自动执行~/.bashrc,通常在~/.bash_profile中调用~/.bashrc:
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
上面的意思是,如果~/.bashrc文件存在则source它。多数Linux发行版在创建帐户时会自动创建~/.bash_profile和~/.bashrc脚本,
~/.bash_profile中通常都有上面这几行。所以,如果要在启动脚本中做某些设置,使它在图形终端窗口和字符终端的Shell中都起作用,
最好就是在~/.bashrc中设置。
■Shell模式
1.交互式登录shell启动
/etc/profile,~/.bash_profile,~/.bash_login和~/.profile
1)以Bash的方式启动登录shell(/etc/passwd里定义的shell是/bin/bash,默认就是这种方式)
/etc/profile⇒
~/.bash_profile⇒
~/.profile
(~/.profile这个启动脚本是sh规定的,bash规定首先查找以~/.bash_开头的启动文件,如果没有则执行~/.profile,是为了和sh保持一致。)
2)以sh的方式启动登录shell(/etc/passwd里定义的shell是/bin/sh,默认就是这种方式)
如果以sh
命令启动bash
,bash
将模拟sh
的行为,以~/.bash_
开头的那些启动文件就不认了。
所以,如果作为交互登录Shell启动,或者使用--login参数启动,则依次执行以下文件:
/etc/profile⇒
~/.profile
2.交互式非登录shell启动
~/.bashrc
为什么登录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
如果环境变量BASH_ENV的值不是空字符串,则把它的值当作启动文件的文件名,source这个脚本。
通过sh,来fork非交互式shell,则
if [ -n "$ENV" ]; then . "$ENV"; fi
一般来说,如果作为非交互Shell启动,则不执行任何启动脚本。通常我们写的Shell脚本都以#! /bin/sh
开头,都属于这种方式。
简单测试
[sabopeusr0-admin@localhost ~]$ grep tshell .bashrc
tshell="non-login shell will see this message"
export tshell
[sabopeusr0-admin@localhost ~]$ grep lshell .bash_profile
lshell="login shell will see this message"
export lshell
[sabopeusr0-admin@localhost ~]$ bash
[sabopeusr0-admin@localhost ~]$ echo $lshell
[sabopeusr0-admin@localhost ~]$ echo $tshell
non-login shell will see this message
[sabopeusr0-admin@localhost ~]$ exit
exit
[sabopeusr0-admin@localhost ~]$ bash --login
[sabopeusr0-admin@localhost ~]$ echo $lshell
login shell will see this message
[sabopeusr0-admin@localhost ~]$ echo $tshell
non-login shell will see this message
[sabopeusr0-admin@localhost ~]$
相关推荐
把adb.rar解压到c盘根目录下,确保解压的2个文件在C:\adb目录下。 ...这时候重新打开命令行 进去点击adb shell进入Android 里面的输入首字母 按tab键 就可以补全对应字符了
配置mvnd可执行文件到系统的环境变量中; 配置后,打开命令行,执行mvnd -version; 构建 mvnd clean package -DskipTests install; idea中使用无效,使用管理员启动idea 就可以了; idea中terminal的shell path ...
� 良好的盈利模式( 3/7 开),产业链条的各方:运营商、制造商、独立软件生产商都可以获得不错的利 益 。 将移动终端的评价标准从硬件向软件转变,极大的激发了软件开发者的热情。 � Android 的源代码遵循 Apache...
* `libexec`:各个服务对应的 shell 配置文件所在的目录。 * `sbin`:存放 Hadoop 管理脚本。 * `share`:hadoop 各个模块编译后的 jar 包所在目录。 * `src`:hadoop 的源码包。 MapReduce 示例 1. 创建输入文件...
get server.exec:server.exe 登陆后,将“IP”的server.exe下载到目标主机c:server.exe 参数:-i指以二进制模式传送,如传送exe文件时用,如不加-i 则以ASCII模式(传送文本文件模式)进行传送 tftp -i 对方IP put...
HBase 组件安装配置知识点总结 本章节主要讲述 HBase 组件的安装和配置过程。... * 环境变量配置错误 * HBase 服务无法启动 本章节详细讲述了 HBase 组件的安装和配置过程,并总结了相关的知识点。
RAR 是一个让你在命令行模式中管理压缩文件的控制台应用。RAR 提供压缩、加 密、数据恢复和许多其它此手册中描述的其它功能。 RAR 只支持 RAR 格式压缩文件,它默认有 .rar 扩展名。不支持ZIP 和其他格 式。即使...
在前两种格式中,会将<来源>复制至<目的地>或将多个<来源>文件复制至已存在的<目录>,同时设定权限模式及所有者/所属组。在第三种格式中,会创建所有指定的目录及它们的主目录。长选项必须用的参数在使用短选项时也...
修改集成开发环境,自动记忆非独立编译时是否写出依赖文件的选项。 6. 大幅提高编译速度。 对其它支持库的更新: 1. 修改高级表格支持库,在双击单元格进入编辑状态后,不能收到第一个“字符输入”事件的BUG。 ...
#如何取定文件与文件集的对应关系,有时想使用某个安装文件, 但没有安装包含该文件的文件集,找到文件集来安装所需文件 首先确认系统中已经安装了“bos.content_list”文件集(fileset), 如果没有安装, 请使用smitty ...
4.4.5 文件模式 40 4.5 配置文件 41 4.5.1 sendmail配置文件部分 41 4.5.2 sendmail配置文件例子 42 4.5.3 配置文件文法 49 4.5.4 特别的标题行 51 4.5.5 地址重写规则 52 4.5.6 构造新的配置文件 58 4.6 命令行参数...
3) 执行source /etc/profile, 安装交叉编译器的脚本配置的环境变量就可以生效了,或者请重新登陆也可。 5、编译osdrv 参见osdrv目录下readme 6、SDK目录介绍 Hi3518_SDK_Vx.x.x.x 目录结构如下: |-- sdk....
如果您的 shell 类型不是 bash,而是 zsh 或其他类型,那么您需要将环境变量添加到对应的配置文件中,例如 `~/.zshrc`。 删除环境变量 如果我们想删除一个环境变量,可以使用 `unset` 命令: `unset 变量名` ...
6.41 setenv指令:查询或显示环境变量 6.42 setup指令:设置公用程序 6.43 sndconfig指令:设置声卡 6.44 timeconfig指令:设置时区 6.45 ulimit指令:控制shell程序的资源 6.46 unalias指令:删除别名 6.47 unset...
定义全局环境变量; 查看日志并查找关键字; 设置防火墙开机自启; 防火墙开放或移除端口; 解压缩文件为压缩包; 从Linux中上传或下载文件到本地(lrzsz); shell编辑命令快捷键; 配置命令开机自动执行脚本; ...
3.1.5 编译链接工具依赖的环境变量 39 3.1.6 示例:使用/D选项进行条件编译 42 3.2 使用Platform SDK 43 3.2.1 Platform SDK的目录结构与功能 43 3.2.2 为编译链接工具设置环境变量 45 3.2.3 Platform ...
1.6 常见的 Linux 文件类型及其对应的描述字符 * 普通文件(-) * 目录文件(d) * 链接文件(l) * 块设备文件(b) * 字符设备文件(c) 1.7 Linux 的文件目录结构 * 根目录(/) * 家目录(~/) * 临时文件...
Windows下需要安装Cygwin类软件且配置环境变量后运行 使用方法 1、需要修改package.json 的scrpts 加一条create 或者自定义名字 主要是为了我们在terminal中输入指令后运行对应的脚本 package.json 2、在项目根...
# 自动从项目目录下的.env文件中加载环境变量 pipenv shell # 虚拟环境中运行命令 pipenv run command 下载依赖包 pipenv install -r requirements.txt 进入util/const.py文件,修改对应的数据库IP地址和端口 进入...