Bash 环境变量

    Bash 环境变量shell

     本篇文章是博主在浏览电鱼电子科技有限公司主页所得,初学者能够在此教程中了解环境变量。如有不明之处,博主回复不及时,也可自主登录电鱼电子自行了解。www.dianyu.netvim

bash 变量,尤为是讨厌的环境变量,已是一个老生常谈的话题了。咱们也更应该对它有一个详细的了解,让它为咱们所用。下面就打开终端,开始吧。安全

 

环境变量bash

 

HOME (LCTT 译注:双关语)除了是你脱下帽子惬意休息的地方,同时也是 Linux 中的一个变量,它是当前用户主目录的路径:编辑器

 

echo $HOME.net

以上这个命令会显示当前用户的主目录路径,一般都在 /home/<your username> 下。继承

 

顾名思义,变量的值是能够根据上下文变化的。实际上,Linux 系统中每个用户的 HOME 变量都是不同的,固然你也能够这样自行更改 HOME 变量的值:教程

 

HOME=/home/<your username>/Documentsit

以上这个命令将会把 HOME 变量设置为你的 Documents 目录。变量

 

其中有三点须要留意:

 

1.= 符号和其两侧的内容之间不加空格。空格在 shell 中有专门的意义,不能随意地在任何地方添加空格。

2.若是你须要对变量进行赋值,只须要使用变量名称就能够了。但若是须要读取或者使用变量的值,须要在变量前面加上一个 $ 号。

3.更改 HOME 变量具备必定的风险。有不少程序是依赖于 HOME 变量的,更改 HOME 变量可能会致使一些不可预见的结果。例如,若是按照上面的方式更改了 HOME 变量,而后执行不带有任何参数的 cd 命令,在一般状况下,会跳转到用户的主目录下,但在这个时候,会跳转到 HOME 变量指定的目录下。

上面第 3 点中环境变量的更改并非持久有效的,在终端关闭后从新打开终端,又或者是新建一个终端,执行 echo $HOME 命令输出的仍然会是初始的值,而不是从新自定义的值。

 

在讨论如何持久地更改一个环境变量以前,咱们先来看一下另外一个比较重要的环境变量。

 

PATH 变量

 

在 PATH 变量中存放了一系列目录,并且是放置了可执行程序的目录。正是因为 PATH 变量的存在,让你不须要知道应用程序具体安装到了什么目录,而 shell 却能够正确地找到这些应用程序。

 

若是你查看 PATH 变量的值,大概会是如下这样:

 

$ echo $PATH

/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/sbin:/bin:/sbin

每两个目录之间使用冒号 : 分隔。若是某个应用程序的所在目录不在 PATH 变量中,那么运行的时候就须要声明应用程序的目录让 shell 可以找到。

 

/home/<user name>/bin/my_program.sh

例如以上命令就会执行当前用户 bin/ 目录下的 my_program.sh 文件。

 

有一个常见的问题:若是你不但愿弄乱系统的 bin/ 目录,同时也不但愿你本身的文件被其它人运行,还不想每次运行的时候都要输入完整的路径,那么,你能够在你的主目录中建立一个独立的 bin/ 目录:

 

mkdir $HOME/bin

而后将这个目录添加到 PATH 变量中:

 

PATH=$PATH:$HOME/bin

而后 /home/<user name>/bin/ 目录就会出如今 PATH 变量中了。但正如以前所说,这个变动只会在当前的 shell 生效,当前的 shell 一旦关闭,环境变量的值就又恢复原状了。

 

若是要让变动对当前用户持续生效,就不能在 shell 中直接执行对应的变动,而是应该将这些变动操做写在每次启动 shell 时都会运行的文件当中。这个文件就是当前用户主目录中的 .bashrc 文件。文件名前面的点号代表这是一个隐藏文件,执行普通的 ls 命令是不会将这个文件显示出来的,但只要在 ls 命令中加入 -a 参数就能够看到这个文件了。

 

你可使用诸如 kate、gedit、nano 或者 vim 这些文本编辑器来打开 .bashrc 文件(但不要用 LibreOffice Writer,它是一个文字处理软件,跟前面几个文字编辑器彻底不一样)。打开 .bashrc 文件以后,你会看见里面放置了一些 shell 命令,是用于为当前用户设置环境的。

 

在文件的末尾添加新行并输入如下内容:

 

export PATH=$PATH:$HOME/bin

保存并关闭 .bashrc 文件,接下来你就会看到 export 语句的效果。执行如下的命令让刚才的修改当即生效:

 

source .bashrc

刚才执行的 source 命令让 .bashrc 文件在当前的 shell 当即生效,而且对于以后打开的 shell 都会有效。所以另外一个等效的方法是退出并从新进入 shell,但这样也太麻烦了。

 

如今,你的 shell 就能自动寻找到 /home/<user name>/bin/ 下的程序了,执行这个目录下的程序也不须要完整地写出程序的路径。

 

自定义变量

 

固然,你也能够定义本身的变量。刚才咱们看到的变量名称都是全大写的,实际上变量名称的定义仍是比较灵活的。

 

定义新变量的过程很是直观,直接对它赋值就能够了:

 

new_variable="Hello"

而后能够用如下的方式读取到已定义变量的值:

 

echo $new_variable

程序的正常工做离不开各类变量,例如要将某个选项设置为打开,又或者让程序找到所需的代码库,都须要使用变量。在 bash 中运行程序的时候会生成一个子 shell,这个子 shell 和执行原程序的父 shell 并非彻底同样的,只是继承了父 shell 的部份内容,并且默认是不继承父 shell 中的变量的。由于变量默认状况下是局部变量,出于安全缘由,一个 shell 中的局部变量不会被另外一个 shell 读取到,即便是子 shell 也不能够。

 

下面举一个例子。首先定义一个变量:

 

robots="R2D2 & C3PO"

而后执行:

 

bash

如今是在 bash shell 中建立了一个子 shell。

 

执行这个命令看看还能不能读取到刚才定义的变量:

 

echo $robots

你会发现读取不到。

 

仍是在这个子 shell 中,为 robots 变量赋一个不一样的值:

 

robots="These aren't the ones you are looking for"

再读取一次:

 

$ echo $robots

These aren't the ones you are looking for

退出这个子 shell:

 

exit

而后再看一下如今 robots 变量的值:

 

$ echo $robots

R2D2 & C3P0

这一个特性能够有效避免配置过程当中产生混乱,同时也会致使一个问题:若是程序中须要设置变量,但却因为子 shell 的缘由没法正常访问到这个变量,该如何解决呢?这个时候就须要用到 export 了。

 

重复一次刚才的过程,但这一次不是经过 robots="R2D2 & C3PO" 方式来设置变量,而是使用 export 命令:

 

export robots="R2D2 & C3PO"

如今你会发现,在进入子 shell 以后,robots 变量的值仍然是最初赋予的值。

 

要注意的是,尽管子 shell 会继承经过 export 导出的变量,但若是在子 shell 中对这个变量从新赋值,是不会影响到父 shell 中对应变量的。

 

若是要查看全部经过 export 导出的变量,能够执行如下命令:

 

export -p

自定义的变量会显示在这个列表的末尾。这个列表中还有一些常见的变量:例如 USER 的值是当前用户的用户名,PWD 的值是当前用户当前所在的目录,而 OLDPWD 的值则是当前用户上一个访问过的目录。所以若是执行:

 

cd -

就会切换到上一个访问过的目录,那是由于 cd 命令读取到了 OLDPWD 变量的值。

 

你也可使用 env 命令查看全部环境变量。

 

若是要取消导出一个变量,能够加上 -n 参数:

 

export -n robots

接下来

 

了解过环境变量的知识以后,你已经到达了可能对本身和他人形成危险的水平,接下来就须要了解如何经过使用别名来让环境变得更安全、更友好以保护本身了。

相关文章
相关标签/搜索