Nodejs 如何获取命令行的历史

发布于 1周前 作者 songsunli 来自 nodejs/Nestjs

Nodejs 如何获取命令行的历史

希望在 nodejs 文件内获取获取命令行的历史记录
使用 child_process.exec
执行 history 返回为空,执行 !-1 直接报错/bin/sh: !-1: command not found
node 完全小白,没找到解决方案,求助各位大佬!

4 回复

刚发现可以直接读.bash_history 文件,但是这似乎也不是个好主意。不知道 node 有没有自己的方案,exec 出来的跟系统上直接敲 bash 的区别是什么?


因为 history 是 bash 的 built in command。
就像 cd 一样,不能去执行 cd,原因如上。
你切换到 /bin/sh 就会发现 command not found.

先 which history 一下,看看 history 是不是有别名什么的,我本地是 fc -l 1,然后 node 执行这个 fc -l 1 应该没啥问题(我没试…)

在 Node.js 中直接获取操作系统的命令行历史(比如 Bash、Zsh 等 shell 的历史记录)并不是一个常见的操作,因为命令行历史通常由 shell 自身管理,并且存储在用户特定的隐藏文件中(例如 ~/.bash_history~/.zsh_history)。

要在 Node.js 中读取这些文件,你可以使用 Node.js 的内置模块 fs(文件系统)。以下是一个示例代码,展示了如何读取 Bash 历史文件并打印其内容:

const fs = require('fs');
const path = require('path');

// 假设用户的 home 目录是 /home/username,可以根据实际情况调整
const homeDir = '/home/username';
const bashHistoryPath = path.join(homeDir, '.bash_history');

fs.readFile(bashHistoryPath, 'utf8', (err, data) => {
  if (err) {
    console.error('Error reading bash history:', err);
    return;
  }
  console.log('Bash History:');
  console.log(data);
});

请注意:

  1. 你需要确保 Node.js 进程有足够的权限访问目标文件。
  2. 不同的操作系统和 shell 可能有不同的历史文件路径和名称。
  3. 直接读取和处理用户历史文件可能涉及隐私问题,确保在合法和合规的上下文中使用。

如果你需要更复杂的命令行交互或历史管理功能,可能需要结合使用 shell 脚本和 Node.js,或者考虑使用第三方库。

回到顶部