如何将 node.js 设置为 bash 的 shell 替代品?例如,我应该能够运行 vi('file')
来打开文件并运行 cd('location')
来在目录之间切换。
这可能吗?
最佳答案
当然可以!不过,使用计算机会变得不那么简单。
首先,您需要知道如何进行设置。虽然您可能会将 Linux 中的用户 shell 设置为 usr/bin/node
,但这将使您只有一个 Node.js REPL,而无需设置其他程序。您要做的是编写一个设置脚本,它可以为您执行以下所有设置/便利步骤,基本上以 repl.start()
结尾。设置完所有内容后生成 REPL。当然,由于 UNIX shell 设置不能指定参数,您将需要编写一个小的 C 程序来使用这些参数执行您的 shell(本质上,exec("/usr/bin/node", "path/to/setup/script.js");
) 并将其设置为您的 UNIX shell。
这里的主要思想是,您使用的任何超出基础知识的命令都必须 require()
d 到您的 shell 中 - 例如对你的文件系统做任何事情,执行
var fs = require("fs")
并从 fs
对象执行所有文件系统调用。这类似于向您的 PATH 添加内容。您可以使用 shelljs
获取基本的 shell 命令或类似的,并获得实际的可执行程序,使用 Node 的内置 child_process.spawnSync
对于前台任务或 child_process.spawn
用于后台任务。
由于您的部分要求是您希望像调用函数一样调用每个程序,因此您需要自己生成这些函数,例如:
function ls(path) {
child_process.spawnSync('/bin/ls', [path], { stdio: 'inherit' });
}
为你想要运行的一切。您可以通过遍历 PATH 中的所有条目并使用涉及 eval()
或 new Function()
的东西以编程方式为每个条目生成执行函数,并分配它们到全局对象,这样您就不必输入任何前缀。
同样,尽管具有这些命名功能,但使用您的计算机将变得不那么简单。许多在后台欺骗和使用 bash 命令的程序可能不再工作。但我当然可以看到能够在命令行环境中利用 JavaScript 的吸引力。
附录:为了编写这个安装脚本,repl.start()
返回的REPLServer
对象有一个context
。与它创建的 REPL session 可访问的全局对象相同的对象。当您编写设置脚本时,您需要将所有内容分配给 context
对象:
const context = repl.start('> ').context;
context.ls = function ls(path) { /* . . . */ }
context.cd = function cd(path) { /* . . . */ }
关于node.js - 使用 Node.js 作为 Shell,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33850903/