2016-12-09 192 views
0

我试图使用file.cpp来执行一些简单的bash命令。代码适用于命令如ls,gedit,echo,但在cd命令失败。使用C代码执行Bash命令

这里是我的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编译后,我的终端输出,

[email protected]:~/Desktop$ g++ -Wno-write-strings file.cpp -o file 
[email protected]:~/Desktop$ ./file 
[email protected]:~/Desktop$ 

当前目录并没有改变,以/etc。我试图更改cd /etccd ..cd some_directoryfile.cpp但没有成功。

请指出我做错了什么。

+2

'exec'类型命令通常运行在它们自己的环境中。如其中,它们不会影响其他任何内容,例如您从中调用它们的过程。 – Iluvatar

回答

2

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

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

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

+0

那么有没有办法在当前终端会话中查看这些更改? – Rahul

+0

@Rahul不,没有。 – immibis

+1

否 - 因为当前会话没有变化。你不能做你想做的事。 'cd'是内置在shell中的命令,它不是程序(vs'ls'或'mkdir') – pm100