在“PATH”设置出错的情况下为什么键入"export PATH=/usr/bin:/usr/sbin:/bin:/sbin"后就可以使用常用命令了

简介: 在“PATH”设置出错的情况下为什么键入"export PATH=/usr/bin:/usr/sbin:/bin:/sbin"后就可以使用常用命令了

首先我们需要知道Linux的环境变量分为两部分

全局环境变量
"env"

image

局部环境变量+全局环境变量
“set”

image

我们之前改动的"etc/profile"中的"PATH"便是其中一个全局环境变量
比较遗憾的是,我找不到只显示局部变量的命令,所以只能手动找不同了

在这里我们可以发现下图比上图多出了这些地方

image

为什么会有这些区别呢,首先我们就需要知道这些变量的一些信息

全局环境变量
简而言之,全局环境变量对于shell会话和所有生成的子shell都是可见的
那"可见"是什么意思呢?简单,"printenv"一下

image

出来的这些就是"可见"的表现了,实际上我们还能使用"env"查询
但是相比“env”而言,"printenv"还能显示单条的变量,而“env”不能。

image

除了"printenv"外。"echo $XXXX"也有同样的效果

image

局部环境变量
局部环境变量相比于全局环境变量,他们只能见于定义他们的进程之中
但这并不意味着它们不重要,相反,它们和全局环境变量一样重要。

这里我们就讲一个局部环境变量的应用

用户自定义变量

当我们启动了一个shell进程的时候,这个进程的局部环境变量或者说用户环境变量就会被创建出来
它不会以持久的形式进行储存,意味着我们可以查询,增加,变动和删除这些局部环境变量

image

异常简单不是吗?在我们后面学习shell脚本的时候,这个操作非常有用
但是越是简单的地方,就越需要注意

首先我们可能会把编程的习惯带到这里
比如我在编码的时候喜欢在等号前后隔一个空格来增加代码辨识度。自认为是一个好习惯,但是在这里,会产生错误

image

同时我们要注意,用这种方法创建的局部环境变量只能在创建它的shell下可用,包括它创建的子shell也无法使用

image

那么全局环境变量又如何呢?
这里我们就要使用前文中使用的命令"export"

export 的基本语法是 “exprot XXXX”
image

此时我们便可以在子shell下访问到父shell创建的环境变量了

我们把“export”和之前的值结合一下
image
是不是和之前我们设置“PATH”的时候差不多呢
没错,我们之前使用export设置PATH便是在设置一个全局环境变量,这个全局环境变量便使得我们能够访问那些目录下的命令

但是我们要注意一点,我们在子shell下设置的全局环境变量无法被创建它的父shell以及父shell新创建的子shelll所访问的
image
这意味着它同样不是持久的,也只是存在于shell当中,受shell的生命周期控制的

那么,让我们回到一开始的问题
在“PATH”设置出错的情况下为什么键入"export PATH=/usr/bin:/usr/sbin:/bin:/sbin"后就可以使用常用命令了呢?
答:
我们用“export”命令将本shell中的环境变量改回正确的路径,使得shell能根据正确的PATH寻找相关命令
你甚至可以直接键入"PATH=/usr/bin"创建局部环境变量来使shell能正确访问放有Linux常用软件。

PS
为什么"export"在PATH设置出错的时候仍能使用呢?
因为它使bash内置的命令,同样是的还有"set",感兴趣的同学可以自己试试

目录
相关文章
|
6月前
|
Nacos
Nacos启动报错解决:which: no javac in (/usr/local/sbin:/usr/local/bin:/
Nacos启动报错解决:which: no javac in (/usr/local/sbin:/usr/local/bin:/
434 0
|
11月前
|
Java Linux Nacos
[root@CentOS7 bin]# ./startup.sh -p 3333 which: no javac in (/usr/local/sbin:/usr/local/bin:/usr/sbi
[root@CentOS7 bin]# ./startup.sh -p 3333 which: no javac in (/usr/local/sbin:/usr/local/bin:/usr/sbi
/usr/bin/xsltproc: not found
/usr/bin/xsltproc: not found
78 0
|
Shell 数据库管理
/bin/sh: 1: tclsh: not found
/bin/sh: 1: tclsh: not found
239 0
|
Shell
#!/bin/sh与#!/bin/bash有区别
#!/bin/sh与#!/bin/bash有区别
86 0
编译问题解决:mkdir: 无法创建目录"/usr/local/share/man/man1": 文件已存在
编译问题解决:mkdir: 无法创建目录"/usr/local/share/man/man1": 文件已存在
272 0
|
IDE 安全 Shell
Linux - #!/bin/bash 和 #!/usr/bin/env bash 的区别
Linux - #!/bin/bash 和 #!/usr/bin/env bash 的区别
503 0
Linux - #!/bin/bash 和 #!/usr/bin/env bash 的区别

热门文章

最新文章