我正在用Node.JS编写一个简单的脚本,我想获取在终端当前会话中运行的上一个命令的历史记录。
我正在使用函数child_process.execSync,但它没有按预期工作。
这是我在网上找到的一个例子,它运作正常:
var execSync = require('child_process').execSync;
var out = execSync('ls');
console.log(out);
process.stdout.write(out);
这是输出:
<Buffer 4c 49 43 45 4e 53 45 0a 52 45 41 44 4d 45 2e 6d 64 0a 69 6e 64 65 78 2e 6a 73 0a 6f 62 73 6f 6c 65 74 65 2e 6a 73 0a 70 61 63 6b 61 67 65 2e 6a 73 6f ... >
LICENSE
README.md
index.js
package.json
test.txt
但是,如果我尝试运行历史记录(我目前正在使用zsh),我会得到一个空字符串
var execSync = require('child_process').execSync;
var out = execSync('history');
console.log(out);
process.stdout.write(out);
这是输出:
<Buffer >
这是因为命令实际上是在不同的环境中启动的吗?
我试过使用一个不存在的命令,我看到了这个错误:
/bin/sh: hist: command not found
child_process.js:1382
throw err;
^
Error: Command failed: hist
/bin/sh: hist: command not found
看起来它正在使用/ bin / sh,我认为它可以连接到我的错误......
谢谢!
答案 0 :(得分:2)
history
为builtin command,您必须使用命令调用zsh
可执行文件以获得所需结果(how to call history from shell scipt)
var out = execSync("zsh -c 'export HISTFILE=~/.zsh_history; fc -R; fc -l 20'");
但您也可以阅读~/.zsh_history
文件并解析它