前提
工作中我们经常遇到很多重复的事情,例如最近我就遇到一个,在debug的时候需要经常到项目里面的logs文件夹下面查看日志,基于这个前提再加上想把之前看linux的一些知识应用一下,写了一个命令,效率倍感提升。
什么是Shell
虽说这个不需要解释了,但是这里还是要占个位,以便不知道的人,通过这个标题去 baidu google查询自己需要的知识
我一直认同的一个观点,一定要了解程序运行背后的原理,在这里给大家简单介绍一下我个人认为在开发
shell过程中应该了解的,方便大家理解并记忆,我本人的知识范围有限,有描述不清楚或者不对的地方还请指正。
我们将在下面通过编写一个实例来进行讲解,目标编写一个自己的命令,这个命令是为了满足我每天 debug 的时候需要查看日志文件
命令、变量、文件
命令
export  在这里您可以理解为设置一个环境变量,例如:export PATH="/usr/local/sbin:$PATH"
source  当你的 .bash_profile 文件变更了,需要用 sorce .bash_profile 重新加载一遍 
变量
$PATH  系统环境变量,你可以简单的理解一些目录的集合,通过 echo $PATH 可以看到
$HOME 当前用户的家目录
文件
.bashrc  or .bash_profile  用户个人的启动文件。可以用来扩展或重写全局配置脚本中的设置。
你可以在你的终端命令行输入 echo; ls -al; 会进入到你的家目录下面列出所有文件(包括隐藏文件),在不同的类 unix 系统中他们的名字可能不太一样,通常会有一些以 . 开头的文件
shell 如何加载?
我们今天自制一个称为 plogs 的命令 , 当在你的终端输入 plogs 或者任何你想开发的终端命令的时候或许会报出类似如下的错误:
1  | command not found: plog  | 
这个错误的原因是终端没有在 $PATH 环境中找到这个命令
另外通常你想要开发一个命令的时候可以用 type [your command] 来检测一下是否存在于系统中, 以免你自己的命令覆盖掉系统的命令, 类似下面,就是检测了系统中是否存在一个 p 命令 
1  | type p  | 
如果这个命令存在,会表现成如下这样子:
1  | rex @ HR in ~ [11:09:22] C:1  | 
当你执行 plogs 这个命令的时候的时候系统要去 $PATH 这个目录集合里面挨个去找,有没有一个可执行的命令文件,例如上面就是在 /Users/rex/bin 下面找到了匹配的可执行文件
那如何添加你存放可执行文件的目录放到 $PATH 中呢?你可以在你的 .bash_profile (可能你的系统中叫其他名字) 文件中加上这么一行 $HOME/bin,这样你就可以将你的命令执行文件放在 家目录下面的 bin 目录里面了。
那为什么要放在 bin 目录中呢?因为bin目录通常是类 unix  系统存放可执行文件的地方