使用C代码执行Bash命令

时间:2016-12-09 01:13:40

标签: c++ linux bash

我尝试使用file.cpp执行一些简单的bash命令。代码适用于lsgeditecho等命令,但在cd命令时失败。

这是我的file.cpp:

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

int main() {
    char *cd[] = {
        "/bin/bash",
        "-c",
        "cd /etc",
        NULL
    };
    execvp(cd[0], cd);
    return 0;
}

我在使用./file编译后执行它,我的终端输出是,

rahul@Inspiron:~/Desktop$ g++ -Wno-write-strings file.cpp -o file
rahul@Inspiron:~/Desktop$ ./file 
rahul@Inspiron:~/Desktop$ 

当前目录未更改为/etc。我尝试在cd /etc中将cd ..更改为cd some_directoryfile.cpp,但没有成功。

请指出我做错了什么。

1 个答案:

答案 0 :(得分:2)

每个进程都有自己的当前目录。

当您运行/bin/bash -c "cd /etc" Bash启动时,更改其当前目录,然后退出。无论您是使用exec还是fork然后exec,还是system运行,或者将其键入shell,或其他方式,都会发生这种情况。

它对您运行它的shell的当前目录没有影响。