Skip to content

Instantly share code, notes, and snippets.

@banyudu
Created November 7, 2020 03:51
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save banyudu/e8dbd2f2ea9a59e77104c0632052a087 to your computer and use it in GitHub Desktop.
Save banyudu/e8dbd2f2ea9a59e77104c0632052a087 to your computer and use it in GitHub Desktop.
使用npm管理常用shell脚本

使用npm管理常用shell脚本

npm一般被用作管理Javascript相关的模块,它同时也提供了『bin』的功能,即安装某模块之后,自动在系统中设置命令行工具。

所以我们就可以拿它来管理命令行工具。

因为npm只特殊对待头部带有#!/usr/bin/env node的脚本,将其转为Node运行。其它的都是直接执行,所以我们就可以随便放一些Shell脚本、Perl脚本甚至二进制包到它的里面,并将其作为一个安装工具来使用。

以一个简单的命令 du -sh * | sort -rh为例,因为我经常记不住这个命令,所以想抽取一个别名dusort。虽然只需要在shell配置中加个函数或别名就好了,但是这样不方便同步和分享。

像这种情况,我们就可以写一个简单的npm包来实现便捷的安装和分发了。

首先,写一个脚本 dusort.sh

#!/bin/sh
du -sh * | sort -rh

再给其加上可执行权限:

chmod a+x ./dusort.sh

再n初始化一个npm包

npm init

得到一个如下的package.json文件

{
  "name": "dusort",
  "version": "1.0.0",
  "description": "du -sh * | sort -rh",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "repository": {
    "type": "git",
    "url": "git+https://github.com/banyudu/dusort.git"
  },
  "author": "",
  "license": "ISC",
  "bugs": {
    "url": "https://github.com/banyudu/dusort/issues"
  },
  "homepage": "https://github.com/banyudu/dusort#readme"
}

在它的内部添加一个bin配置:

{
  "bin": {
    "dusort": "./dusort.sh"
  }
}

最后执行

npm publish

命令进行发布

这样就搞定了。

使用的时候,既可以免安装执行:

npx dusort

也可以先安装再执行

npm i -g dusort
dusort

一个方便易用的命令就配置完成了。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment