■各配置文件
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 ~]$
相关推荐
Linux shell 脚本环境变量问题深层探索 shell 脚本环境变量是 Linux 系统中一个非常重要的概念,它对 shell 脚本的执行和调试产生了深远的影响。本文将深入探索 shell 脚本环境变量的问题,从实践和实验的角度来...
系统文件章节包括了Linux系统目录结构、环境变量文件和系统配置文件等内容,学习者可以通过这些文件更好地了解和管理Linux系统环境。 常用的命令和工具章节则提供了丰富的命令行工具,这些工具几乎涵盖了系统管理的...
/bin/bash`(或对应Shell的路径),并赋予执行权限(`chmod +x script.sh`)。 8. **netmask_2_bits.sh**:可能是一个用于将网络掩码转换为位数的脚本,这在IP网络配置或路由计算中常见。例如,255.255.255.0对应的...
3. **变量管理**:库支持 Octopus Deploy 的变量系统,可以方便地在Python代码中处理和应用这些变量,确保不同环境下的配置差异得到妥善处理。 4. **工作流集成**:cloudshell-octopus-deploy库可以与现有的工作流...
1. **/etc/profile**:这是系统级的全局环境变量配置文件,当任何用户首次登录系统时,这个文件会被执行。它通常用来设置适用于所有用户的环境变量。此外,它还会从`/etc/profile.d`目录下的其他配置文件中读取并...
Java环境变量配置是Java开发和运行的基础,它涉及到PATH、JAVA_HOME、CLASSPATH等关键变量的设置。下面将详细介绍这些步骤以及相关知识点。 1. **JAVA_HOME**: 这是Java安装目录的路径,包含了JDK(Java ...
在Unix环境下,经常需要处理各种配置文件,其中.ini格式的配置文件非常常见。这类文件通常用于存储应用程序的设置信息,包括数据库连接、路径设置等。本文将深入探讨如何使用Unix shell与awk工具来编写一个脚本来...
在Linux中设置环境变量,最常见的方法是在终端中使用export命令,但当需要一次性设置多个环境变量时,逐个敲入export命令显然效率低下,为此,可以采用批处理脚本的方式来高效配置。 首先,我们来解释一下什么是...
- 可以轻松地处理文本文件,如配置文件和日志文件。 - 支持条件判断、循环等编程结构。 - **Shell脚本的应用场景**: - **系统监控**:定期检查系统状态并发送通知。 - **备份管理**:自动化备份关键数据和文件...
Shell中的作业也包含对变量的操作,如使用export关键字将变量导出为环境变量,理解局部变量、环境变量、shell变量之间的区别,以及进行变量替换。变量替换包括文件名替换、参数替换、命令替换、算术替换等,它们允许...
- 用户在登录时会加载特定的Shell环境配置文件,如.bashrc或.bash_profile。 - 这些文件用于设置环境变量、别名和其他个性化设置。 #### 二、文件操作与管理 ##### **2.1 文件操作基础** - **文件查看** - ...
- 环境配置:设置和管理环境变量等。 #### 二、文件安全与权限 - **2.1 文件类型** - **普通文件**:存储数据的文件,通常具有扩展名。 - **目录**:用于组织文件和其他目录的容器。 - **链接**:软链接(符号...
以上总结了文档中提及的关于LINUX与UNIX SHELL编程的核心知识点,涵盖了文件操作、权限管理、文本处理、脚本编写、环境变量配置、工具使用等多个方面,适用于希望学习和提升shell编程技能的读者。
### LINUX中的环境变量配置详解 在LINUX操作系统中,环境变量是系统运行过程中用来存储配置信息的一种重要方式。对于刚接触LINUX的新手来说,掌握环境变量的配置方法至关重要。本文将详细介绍LINUX环境中环境变量的...
此外,还学会了配置环境变量、文件行数统计等实用技能。通过编写和分析Shell脚本,熟悉了循环、判断等控制结构,以及文件操作。在代码阅读过程中,对Linuxer的主要实现有了更深的理解,进一步提升了Linux系统管理和...
- 对于外部命令,Shell会在PATH环境变量指定的路径中查找对应的可执行文件。 - 对于内部命令(如`cd`),Shell直接处理而不需查找。 - **脚本示例分析:** - 简单脚本通常包含一系列命令和逻辑结构。 - 例如,...
可以使用环境变量或外部配置文件来安全地存储这些敏感信息。 9. **权限**:确保运行脚本的用户具有执行SQL查询和连接到Oracle数据库所需的权限。 10. **性能优化**:对于大数据量的查询,考虑使用绑定变量、索引、...
Java环境变量配置是Java开发和运行的基础步骤,对于任何想要在本地系统上使用Java的开发者来说,理解并正确设置这些变量至关重要。Java环境变量主要包括JAVA_HOME、PATH和CLASSPATH,它们各自扮演着不同的角色,确保...
Linux环境变量是操作系统用于存储信息的关键机制,这些信息在各个程序之间共享,使得软件能够找到必要的文件、配置和命令。在Linux系统中,环境变量帮助定位可执行文件、指定默认目录、控制用户界面等。当在终端输入...