gpt4 book ai didi

javascript - 为什么 child_process.execSync 的输出为空?

转载 作者:行者123 更新时间:2023-12-02 15:52:25 29 4
gpt4 key购买 nike

我正在使用 Node.JS 编写一个简单的脚本,我想获取在终端当前 session 中运行的上一个命令的历史记录。

我正在使用函数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

但是,如果我尝试运行 history,我会得到一个空字符串(我当前正在使用 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,我认为它可能与我的错误有关......

谢谢!

最佳答案

历史记录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 文件并解析它

关于javascript - 为什么 child_process.execSync 的输出为空?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31765374/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com