一、背景
有一个名字为 zk.sh 的 shell 可执行脚本,直接执行时提示找不到命令,但是如果在前面加上 ./ 的话就可以运行这个脚本。这就很奇怪了。
二、原因
如果我们直接调用 zk.sh,linux 系统会去环境变量 PATH 里寻找有没有叫 zk.sh 的指令,然而 PATH 里面并没有 zk.sh。所以写成 zk.sh 是会找不到命令的。用 ./zk.sh 告诉系统说,就在当前目录找。
三、环境变量
环境变量决定了 shell 将到哪些目录中寻找命令或程序,$PATH 的值是一系列目录,当你运行一个程序时,Linux 在这些目录下进行搜索。输入下面的命令,就可以查看当前的环境变量是多少。如下图:
echo $PATH
我们在 Linux 上使用的命令都可以在这里面找到,例如 ls 命令。但是如果我们想看命令具体的位置,可以使用 which 命令。如下图:
四、添加环境变量
假设我自己有几个 shell 命令,以后在运行的时候不想添加路径执行,那么可以把自己的命令所在路径添加进环境变量。
4.1 临时添加
输入以下的命令,这是一次临时的指定方法,关闭终端之后就不再生效
# 我的 shell 脚本在 /home/bin 的目录下
export PATH=$PATH:/home/bin
4.2 永久添加
此种添加方式永久有效,配置过程如下图:
# 修改系统配置文件
vi /etc/profile
# 在文件的最下面添加如下内容
export PATH=$PATH:/home/bin
# 刷新配置文件
# source /etc/profile
# 查看系统的环境变量,看看是否有我们配置的路径
# echo $PATH