我一直在寻找答案而我找不到答案(也许我不是很好)。问题如下:
var spawn = require('child_process').spawn;
var proc = spawn('fc', ['-ln', '-1']);
proc.stdout.on('data', function (data) {
console.log(data.toString('utf-8'));
});
proc.stderr.on('data', function (data) {
console.log('Error: ' + data.toString('utf-8'));
});
proc.on('close', function (code) {
console.log(code);
});
当我运行此节点脚本时,它输出'0'而没有其他内容。显然spawn
有效,但它不输出历史记录。我尝试了很多组合,但fc
命令根本不输出任何内容。我也尝试过exec和execSync。两者都没有输出。
有没有办法从node.js获取bash历史记录?我错过了什么?
根据this,无法在shell脚本中输出bash history命令。这可能意味着从产生的子进程中,它仍然成立。我放弃了尝试获取最后一个使用过的命令,因为Etan让我意识到在交互式多会话中没有简单的方法来告诉“最后使用过的命令”。我现在正试图从Node内部读取$ HISTFILE shell var(历史文件位置)但没有运气。
有什么想法吗?
我只是硬编码了大多数使用过的shell历史路由(bash,zsh,fish)并直接读取文件。但是,由于我学到了很多关于shell脚本的知识,所以我将保持开放状态,希望这会对其他人有所帮助。在Node中使用的关键变量(至少在Mac中)是process.env.SHELL
和process.env.HOME
,用于构建文件路径。