我的代码:
#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 ;
}
没有输出。
答案 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