事情的初衷是我在测试站点配置时需要不断重复一些步骤,比如
deploy三连
,建站二连
,虽然使用终端操控已经很简便了,但是尝试多了之后也会厌烦。于是想到写一个shell脚本来帮助我完成以上的任务,这样的话我每次只要打开终端,按一个小小的up
键调用历史命令就可以完成上述任务了。同时这也是我真正意义上第一次接触shell脚本编程
基础配置
在开始写脚本之前还需要进行一些基础的环境配置
新建shell文件夹
这个主要是方便管理shell文件,因为以后肯定还要写的,干脆用一个统一的文件夹存起来好了,我的存储路径是/Users/lizhiyuan/Documents/Shell
将上述文件夹路径添加至环境变量
主要是每次启动终端想要打开shell文件,都需要首先cd
到上述路径里,太麻烦了,不如直接添加到环境变量里,这样的话每次只需要在终端里敲shell文件名就可以运行shell文件了
mac下自带的终端是bash
,我之前换成了zsh
,影响都不大。如果是bash
,就打开.bash_profile
文件,如果是zsh
,就打开.zshrc
,然后添加如下代码
1 | export PATH=/Users/lizhiyuan/Documents/Shell:$PATH |
大意就是将上述路径添加至环境变量,当然我为了懒,还在里面添加了
1 | alias shfile="/Users/lizhiyuan/Documents/Shell" |
就是将上述路径命了一个别名叫shfile
,这样我每次在终端里输入shfile
就可以进入上述路径了
当然这里可以一次搞完,再添加一下博客的别名
1 | alias blog="/Users/lizhiyuan/Documents/blog" |
检验效果
重启终端,直接键入之前的关键词,如blog
,shfile
,如果能直接显示进入路径则表示更改成功,当然也可以通过输入
1 | $ PATH |
来查看当前环境变量
deploy三连
哈哈这个名字是起着好玩的,实际上就是每次需要把本地hexo博客上传至github或者其他托管的网站上需要的三个步骤,现在我将其简化,只需要一个deploy.sh
就可以完成步骤
新建shell文件
在之前的shell
文件夹下,新建一个名为deploy.sh
(或者其他你认为可以表示这样一个过程的名字)的文件
添加代码
1 |
|
其中第一行表示这个文件由zsh
来解释,如果你的电脑是bash
,就改成#!/bin/bash
赋予权限
如果直接在终端里运行上述文件,终端会提示你没有权限,这个时候我们需要cd
到shell
的根目录下,比如我的电脑就是cd ~/Documents/shell
,然后输入chmod +x deploy.sh
,权限问题解决
newSite二连
这个问题说实话我还没有很好地解决,目前只是用了一个替代方法。
首先说明这个文件的需要,背景是我每次调试网站时,有些变化需要重新部署环境才能看到的,也就是说我需要
- 终止当前
hexo serve
服务 - 查看当前端口
4001
被什么进程占用了(我默认是用4001,因为4000被node
占用了) - kill 上述进程
- cd blog目录
hexo serve --port 4001
前三步可以用关掉当前终端来解决,但是用多了之后还是会觉得麻烦,最好是用一个脚本解决上述所有问题,不需要关闭终端,脚本自动找到端口4001
占用的进程,并且kill掉上述进程,之后启动serve
服务。
问题就出在找到指定端口对应的进程,原来我是采用$ lsof -i:4001
来查看,但是这个命令只能log当前进程,我不知道能不能返回当前进程,再加上我对shell的语法不是很熟悉,所以只能在网上寻求帮助,但是搜索一圈之后也无果。后来发现netstat
命令也可以实现类似的功能,但是在自己尝试解析netstat
时,发现终端似乎无能为力
我目前采取的解决方案是写一个脚本运行上述的4,5
步骤,其他的用关闭终端来解决。脚本命名为newSite.sh
,内容如下
1 |
|
以后彻底解决了这个问题再来补充