美文网首页
shell 环境变量

shell 环境变量

作者: AD刘涛 | 来源:发表于2020-03-02 00:08 被阅读0次

前言

经过前一章FHS的说明后,我们知道查阅文件属性的指令ls完整文件名为:/bin/ls(这是绝对路径), 那你会不会觉得很奇怪:“为什么我可以在任何地方执行/bin/ls这个指令呢? ” 为什么我在任何目录下输入 ls 就一定可以显示出一些讯息而不会说找不到该 /bin/ls 指令呢? 这是因为环境变量 PATH 的帮助所致!

环境变量

环境变量的作用域比自定义变量的要大,如 Shell 的环境变量作用于自身和它的子进程。在所有的 UNIX 和类 UNIX 系统中,每个进程都有其各自的环境变量设置,且默认情况下,当一个进程被创建时,除了创建过程中明确指定的话,它将继承其父进程的绝大部分环境设置。Shell 程序也作为一个进程运行在操作系统之上,而我们在 Shell 中运行的大部分命令都将以 Shell 的子进程的方式运行。

原理

当我们在执行一个指令的时候,举例来说ls好了,系统会依照PATH的设置去每个PATH定义的目录下搜寻文件名为ls的可可执行文件, 如果在PATH定义的目录中含有多个文件名为ls的可可执行文件,那么先搜寻到的同名指令先被执行!

创建变量

在 Shell 中如何创建一个变量,如何给变量赋值和如何读取变量的值呢?

使用 declare 命令创建一个变量名为 tmp 的变量:

$ declare tmp

其实也可以不用 declare 预声明一个变量,直接即用即创建,这里只是告诉你 declare 的作用,这在创建其它指定类型的变量(如数组)时会用到。

使用 =号赋值运算符,将变量 tmp 赋值为 test。注意,与其他语言不同的是, Shell 中的赋值操作,=两边不可以输入空格,否则会报错。

# 正确的赋值
$ tmp=test

# 错误的赋值
$ tmp = test

读取变量的值,使用 echo 命令和 $ 符号($ 符号用于表示引用一个变量的值,初学者经常忘记输入):

$ echo $tmp

查看当前终端环境变量

有时,您可能希望将程序安装到计算机的某个位置,但是你希望可以在任意目录下轻松地执行它们,而无需指定它们的确切位置。通过在$PATH中添加一个目录,可以很容易地做到这一点。要查看当前$PATH中的内容,请输入:echo $PATH

添加自定义路径到“ PATH ”环境变量

临时配置

假设我们目前刚好在我们自己linux系统中安装了mysql数据库。当你想运行mysql程序时,你每次都需要在命令行输入长长的指令/usr/local/mysql/bin,但那样很不方便,如何做到像使用系统命令一样执行mysql程序呢?那就要将命令所在路径添加到 PATH 环境变量了。

在前面我们应该注意到 PATH里面的路径是以:作为分割符的,所以我们可以这样添加自定义路径

$ PATH=$PATH:/usr/local/mysql/bin

注意这里一定要使用绝对路径

现在,只需输入脚本的名称,就可以在系统的任何位置执行脚本,而不必在键入时包含完整的路径。但是,如果重新启动计算机或创建一个新的终端实例,会发生什么情况呢? 命令失效了。有没有方法让添加的环境变量全局有效?或者每次启动 Shell时自动执行上面添加自定义路径到PATH 的命令?

每个用户的 home 目录中有一个 Shell每次启动时会默认执行一个配置脚本,以初始化环境,包括添加一些用户自定义环境变量等等。当前我的系统环境使用的 Shell 是 zsh,它的配置文件是 .zshrc,相应的如果使用的 Shell 是 Bash,则配置文件为 .bashrc。它们在 etc下还都有一个或多个全局的配置文件,不过我们一般只修改用户目录下的配置文件。Shell 的种类有很多,可以使用cat /etc/shells命令查看当前系统已安装的 Shell。

确定shell的类型

不确定你在运行哪个shell ?如果您正在使用几乎所有常见的Linux发行版,并且没有更改默认设置,那么您可能正在运行Bash。但是您可以用一个简单的命令来确认这一点
echo $SHELL

永久配置

我们可以简单地使用下面命令直接添加内容到 .zshrc 中:

$ echo "PATH=$PATH:/usr/local/mysql/bin" >> .zshrc

上述命令中 >> 表示将标准输出追加的方式重定向到一个文件中,注意前面用到的 >以覆盖的方式重定向到一个文件中,使用的时候一定要注意分辨。在指定文件不存在的情况下都会创建新的文件。

对于bash,你只需要添加export PATH=$PATH:/place/with/the/file 到合适的文件中,当你在启动终端时会自动读取当前shell的环境变量. 你可以在几个不同的地方设置变量名, 比如:~/.bash_profile, ~/.bashrc, ~/.profile. 这些文件之间的区别(主要)在于它们何时被shell读取。如果你不知道把它放在哪里,~/.bashrc是一个不错的选择。

如何让环境变量立即生效

前面我们在 Shell 中修改了一个配置脚本文件之后(比如 zsh 的配置文件 home 目录下的 .zshrc),每次都要退出终端重新打开甚至重启主机之后其才能生效,很是麻烦,我们可以使用 source 命令来让其立即生效,如:

➜  ~ source ~/.zshrc

参考文档1
参考文档2

相关文章

  • shell-环境变量

    环境变量可以被所有shell脚本使用set | more 列出所有的环境变量 常用的shell环境变量 PATH ...

  • Linux命令行与Shell-----环境变量

    全局环境变量全局环境变量对于shell会话和所有生成的子shell都是可见的。 局部变量则只对创建它们的shell...

  • Terminal如何添加自定义的Shell脚本

    添加Shell到环境变量 一个目录下都是Shell脚本, 将所以的Shell脚本都添加到环境变量。只有设置好777...

  • Linux Shell(一)

    Shell 命令 Shell是什么? echo $SHELL 环境变量 当前shell的路径 分了两个语系:ba...

  • 【Linux 命令行与 shell 脚本编程大全】 6 使用 L

    6.1 什么是环境变量 shell 中用来存储有关 shell 会话和工作环境的变量,被叫做 环境变量( Envi...

  • shell第11章shell脚本

    什么是shell? Bash shell: 什么是shell脚本? 变量的介绍: 普通变量介绍: 环境变量介绍: ...

  • 系统变量

    1:环境变量 在bash shell中环境变量分为两类: 全局环境变量 局部环境变量 1.1:全局环境变量: 全局...

  • Linux:Ubuntu系统环境变量配置总结

    摘要:Ubuntu,环境变量 环境变量简介 bash shell用一个叫做环境变量(environment var...

  • 每天一个Linux命令之export

    export命令用于将shell变量输出为环境变量,或者将shell函数输出为环境变量。 一个变量创建时,它不会自...

  • 查看当前shell

    查看当前可使用的shell 最常用的查看shell的命令,但不能实时反映当前shell 环境变量中shell的匹配...

网友评论

      本文标题:shell 环境变量

      本文链接:https://www.haomeiwen.com/subject/xshdkhtx.html