前提
工作中我们经常遇到很多重复的事情,例如最近我就遇到一个,在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
系统存放可执行文件的地方