开发 Shell 命令

前提

​ 工作中我们经常遇到很多重复的事情,例如最近我就遇到一个,在debug的时候需要经常到项目里面的logs文件夹下面查看日志,基于这个前提再加上想把之前看linux的一些知识应用一下,写了一个命令,效率倍感提升。

脚本超链接: github

什么是Shell

​ 虽说这个不需要解释了,但是这里还是要占个位,以便不知道的人,通过这个标题去 baidu google查询自己需要的知识

啰嗦

​ 我认为看这篇文章的人,说明对类 unix 系统的执行流程不太了解。

​ 另外这篇文章是基于 Mac 系统讲解的,对于类 unix 系统应该差别不会太大

我一直认同的一个观点,一定要了解程序运行背后的原理,在这里给大家简单介绍一下我个人认为在开发 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 或者任何你想开发的终端命令的时候或许会报出类似如下的错误:

command not found: plog

​ 这个错误的原因是终端没有在 $PATH 环境中找到这个命令

​ 另外通常你想要开发一个命令的时候可以用 type [your command] 来检测一下是否存在于系统中, 以免你自己的命令覆盖掉系统的命令, 类似下面,就是检测了系统中是否存在一个 p 命令

$ type p
p not found

如果这个命令存在,会表现成如下这样子:

# rex @ HR in ~ [11:09:22] C:1
$ type ls
ls is an alias for ls -G

# rex @ HR in ~ [11:10:32]
$ type plogs
plogs is /Users/rex/bin/plogs

​ 当你执行 plogs 这个命令的时候的时候系统要去 $PATH 这个目录集合里面挨个去找,有没有一个可执行的命令文件,例如上面就是在 /Users/rex/bin 下面找到了匹配的可执行文件

那如何添加你存放可执行文件的目录放到 $PATH 中呢?你可以在你的 .bash_profile (可能你的系统中叫其他名字) 文件中加上这么一行 $HOME/bin,这样你就可以将你的命令执行文件放在 家目录下面的 bin 目录里面了。

那为什么要放在 bin 目录中呢?因为bin目录通常是类 unix 系统存放可执行文件的地方

本作品采用《CC 协议》,转载必须注明作者和本文链接
rexmolo
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!