首页 > 解决方案 > 如何使用 Nodejs 而不是 bash 创建全局可用的 shell 脚本?

问题描述

基本上,我希望能够打开一个终端并输入

$ 哈尔普

并让它返回一些我一直忘记的有用命令。我想在不必学习 bash 的情况下做到这一点。或其他语言,因为我知道 JavaScript。我怎样才能做到这一点而不必编译它或将其翻译成 bash 或任何东西?我只想编写一个 javascript 文件并让它运行,就好像我编写了一个 shell 脚本并将它放在 /usr/local/bin 中一样。

标签: node.jsunix

解决方案


我想通了,我只是想让人们知道如何去做。

首先,简单的例子——我写了我想引用的文本文件。只是一个普通的文本或降价文件。我称之为 haylp.md

haylp.md:

commands i keep forgetting

然后我创建了一个名为 haylp.js 的 Node/JavaScript 文件来读取它的内容:

haylp.js

const fs = require('fs');

fs.readFile('/usr/local/lib/haylp/emacsCmds.md', 'utf8', (err, data) =>{
    if(err){ console.error(err); return; }
    console.log(data);    
});

这就是我感到困惑的地方,因为我知道有一种方法可以使用看起来像“#!/bin/node”的shebang,它可以让你输入

$ haylp (或) ./haylp.js (或) sh ./haylp.js

所以回答了我关于shebang的问题,但我仍然无法让它执行,也不知道把它放在哪里。所以这是完整的结果。

第 1 步创建 js 文件并添加 2 行 shebang 以实现兼容性。

haylp.js:

#!/bin/sh
':' //; exec "$(command -v nodejs || command -v node)" "$0" "$@"


const fs = require('fs');

fs.readFile('/usr/local/lib/haylp/emacsCmds.md', 'utf8', (err, data) =>{
    if(err){ console.error(err); return; }
    console.log(data);    
});

步骤 2 创建文本文件

将它放在 /usr/local/lib/haylp 的文件夹中(如果这是放置它的正确位置,我不肯定;如果我错了,请有人纠正我)

步骤 3 使 js 文件可执行:

$ chmod +x haylp.js

步骤 4 将 haylp.js 复制到 bin

$ sudo mv ./haylp.js /usr/local/bin/haylp

这对我的用例来说是否矫枉过正?大概。但它可能不适合你。它可能并不完美,所以如果有人有建议,我会全力以赴。


推荐阅读