4.2 环境变量

4.2 环境变量 #

4.2.1 系统环境变量 #

环境变量是每个 Shel 打开都可以直接获得到的变量。

env 命令可以查看所有已经存在的环境变量。

set 可以查看到比 env 更多的环境变量,包括预定义变量。

$PATH 是命令搜索路径,如果使用的命令不在 $PATH 下就需要使用完整路径。


  • $? 可以查看上一条命令是否执行成功,成为返回 0

  • $$ 查看当前进程的 PID

  • $0 查看当前执行的脚本或程序的名称。


位置参数 #

$1,$2 ,...., $9,${10} ...

${2-_} 表示变量替换,意思是,如果 $2 不为空就取 $2,如果为空就是 _

$PS1 #

$PS1 用于定义 Unix 或类 Unix 操作系统中的命令行提示符。它控制着命令行界面(shell)中显示的每个命令行的外观和格式。用于设置主提示符(primary prompt)。主提示符通常在每个命令行的开始处显示,并用于指示用户输入命令。

$PS1 的值可以包含一些特殊的转义字符和变量,以便在提示符中插入特定的信息,例如当前用户名、主机名、当前工作目录等。

下面是一个示例,展示如何设置 $PS1 变量来定义自定义的命令行提示符:

# 设置自定义的命令行提示符
export PS1="\u@\h:\w\$ "

# 示例输出:user@hostname:/current/path$

在上述示例中,$PS1 的值为 "\u@\h:\w\$ ",其中:

  • \u 表示当前用户名
  • \h 表示当前主机名
  • \w 表示当前工作目录
  • \$ 表示一个符号($ 表示普通用户,# 表示超级用户)

命令行提示符的格式将会显示为 user@hostname:/current/path$,其中 user 是当前用户名,hostname 是当前主机名,/current/path 是当前工作目录。

4.2.2 配置文件 #

环境变量配置文件常见目录有:

  • /etc/profile
  • /etc/profile.d
  • ~/.bash_profile
  • ~/.bashrc
  • /etc/bashrc

在 /etc 目录下是所有用户通用的,不管是普通用户还是管理员。用户家目录配置文件是用户特有的。

.bashrc 和 .bash_profile 是在 Bash shell 中用于配置用户环境的特殊文件。它们有一些区别和不同的用途:

.bashrc

作用:.bashrc 文件用于定义用户每次打开新的终端会话时需要加载的配置和环境变量。

执行时机:每次打开新的终端会话(非登录会话)时,Bash shell 会自动加载并执行 .bashrc 文件。

使用场景:通常用于定义个人偏好设置、自定义别名、设置环境变量等,适用于非登录终端会话的配置。

.bash_profile

作用:.bash_profile 文件用于定义用户登录时需要加载的配置和环境变量。

执行时机:用户登录时,Bash shell 会自动加载并执行 .bash_profile 文件。

使用场景:通常用于执行一次性的初始化任务、设置全局环境变量、加载其他脚本等,适用于登录终端会话的配置。

注意

在某些情况下,Bash shell 可能会加载 .bash_profile 作为登录会话的配置文件,如果 .bash_profile 文件不存在,它会尝试加载 .bash_login 文件,如果还不存在,则尝试加载 .profile 文件。

在交互式登录会话中(例如通过 SSH 登录到远程服务器),Bash shell 会加载 .bash_profile,而不会加载 .bashrc。但在某些配置中,.bash_profile 也会显式地调用 .bashrc,以便在登录时也加载 .bashrc 的配置。

在非登录会话中(例如打开新的终端窗口),Bash shell 只会加载 .bashrc,而不会加载 .bash_profile。

总之,.bashrc 适用于非登录终端会话的配置,而 .bash_profile 适用于登录终端会话的配置。它们的区别在于执行时机和适用场景。你可以根据需求在这两个文件中定义和管理你的个人环境和配置。

4.2.3 su - 和 su #

su - 和 su 是系统中切换用户身份的命令。它们之间的主要区别如下:

  1. 环境变量:su - 会启动一个新的登录会话,并使用目标用户的环境变量。这包括目标用户的 HOME 目录、PATH、shell 配置文件等。而 su 仅切换用户身份,但保留当前用户的环境变量。

  2. 工作目录:su - 会将工作目录更改为目标用户的 HOME 目录,因为它创建了一个新的登录会话。而 su 保留当前工作目录,不会更改目录。

  3. shell 配置文件的加载:su -会加载目标用户的 shell 配置文件(例如 .bashrc、.profile 等),以确保使用目标用户的配置。su 不会加载目标用户的配置文件。

  4. 权限:su - 通常需要输入目标用户的密码才能切换到目标用户。而 su 可以在当前用户有切换权限的情况下,直接切换到目标用户。

综上所述,su - 在切换用户身份时提供了更完整的环境切换,包括环境变量、工作目录和 shell 配置文件的加载。它适用于需要完全切换到目标用户身份并执行相关操作的情况。而 su 仅切换用户身份,保留当前用户的环境,适用于临时需要执行某些操作而无需完全切换用户身份的情况。

可以看下在执行 su - 和 su 两个命令的环境变量文件执行顺序: