我可以获得不使用历史记录或〜/ .bash_history的执行命令吗?

时间:2014-06-18 13:19:08

标签: c linux exec

我的代码:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

int main(void)
{
    printf("entering main process---\n");
    int ret;
    char *argv[] = {"history",NULL};
    ret = execvp("history",argv);
    if(ret == -1) 
        perror("execl error");
    printf("exiting main process ----\n");
    return 0;
}

输出: 进入主要过程--- execl错误:没有这样的文件或目录 退出主要过程----

问题:   我可以获得不使用历史记录或〜/ .bash_history的执行命令吗?

使用像execvp这样的函数似乎有些不对劲。 我试过了系统功能。

代码:

#include <stdio.h>
int main()
{
    system("history");
    return 0 ; 
}

没有输出。

2 个答案:

答案 0 :(得分:1)

如果您尝试man history,则会进入BASH_BUILTINS(1) General Commands Manual页面。这意味着历史记录是bash shell内部的一部分。要通过execvp()执行某些操作,您需要在PATH中的某个位置设置实际的可执行文件。

答案 1 :(得分:0)

目前还不清楚为什么阅读~/.bash_history是不够的。是因为你想要当前正在运行的shell的历史记录吗?

简短的回答是否定的,你无法得到它。

答案很长,您可以使用ptrace/proc/pid/mem附加,在内存中查找历史记录并打印出来。 可能不值得努力。

如果您愿意,可以使用

运行程序来管道内置历史记录的输出
history | ./myprog