我试图在golang中运行一个内置的shell命令并获得结果。下面是代码:
package main
import (
"fmt"
"os/exec"
)
func main(){
cmd := exec.Command("sh", "-c", "history")
stdout, err := cmd.Output()
if err != nil {
fmt.Println(err.Error())
return
}
fmt.Println(string(stdout))
}
字符串
但是我只得到输出:
exit status 127
型
如果你能帮忙的话,我会很感激的。
2条答案
按热度按时间lawou6xi1#
"bash", "-c"
创建了一个非交互式的bash,它的下一个命令将假定为非交互式运行。根据我的研究,历史不支持非交互式shell。这就是为什么history
命令单独使用"bash", "-c", "history"
时不输出任何内容我发现的解决方法:
字符串
如果您使用的是另一个shell,可能需要将
bash
和~/.bash_history
替换为与另一个shell相关的相应值。我不知道:/详情:
How to view the output of history from a non-interactive shell given path to HISTFILE?
bash -c and noninteractive shell的
Why does the history command do nothing in a script file?的
如果我提供的任何信息是错误的,请通知我。我根据我在
Details
下发布的网站做出了这个回答。kknvjkwl2#
问题是
sh -c history
不起作用。您正在启动的shell没有该命令。history
不是标准的POSIX命令。你可能在一个
/bin/sh
恰好是Dash的系统上。如果
sh
恰好是Bash,则history
命令将成功执行,即使Bash作为sh
调用; Bash不会在POSIX模式下隐藏该命令。在我这里的一个系统上:
字符串