使用npm管理常用shell脚本
npm一般被用作管理Javascript相关的模块,它同时也提供了『bin』的功能,即安装某模块之后,自动在系统中设置命令行工具。
所以我们就可以拿它来管理命令行工具。
因为npm只特殊对待头部带有#!/usr/bin/env node
的脚本,将其转为Node运行。其它的都是直接执行,所以我们就可以随便放一些Shell脚本、Perl脚本甚至二进制包到它的里面,并将其作为一个安装工具来使用。
以一个简单的命令 du -sh * | sort -rh
为例,因为我经常记不住这个命令,所以想抽取一个别名dusort
。虽然只需要在shell配置中加个函数或别名就好了,但是这样不方便同步和分享。
像这种情况,我们就可以写一个简单的npm包来实现便捷的安装和分发了。
首先,写一个脚本 dusort.sh
1#!/bin/sh 2du -sh * | sort -rh
再给其加上可执行权限:
1chmod a+x ./dusort.sh
再n初始化一个npm包
npm init
得到一个如下的package.json文件
1{ 2 "name": "dusort", 3 "version": "1.0.0", 4 "description": "du -sh * | sort -rh", 5 "main": "index.js", 6 "scripts": { 7 "test": "echo \"Error: no test specified\" && exit 1" 8 }, 9 "repository": { 10 "type": "git", 11 "url": "git+https://github.com/banyudu/dusort.git" 12 }, 13 "author": "", 14 "license": "ISC", 15 "bugs": { 16 "url": "https://github.com/banyudu/dusort/issues" 17 }, 18 "homepage": "https://github.com/banyudu/dusort#readme" 19} 20
在它的内部添加一个bin配置:
1{ 2 "bin": { 3 "dusort": "./dusort.sh" 4 } 5}
最后执行
1npm publish
命令进行发布
这样就搞定了。
使用的时候,既可以免安装执行:
1npx dusort
也可以先安装再执行
1npm i -g dusort 2dusort
一个方便易用的命令就配置完成了。