I’m trying to use file.cpp
to execute some simple bash
commands. Code works for commands like ls
, gedit
, echo
but fails at cd
command.
Here is my file.cpp:
#include <stdio.h> #include <unistd.h> int main() { char *cd[] = { "/bin/bash", "-c", "cd /etc", NULL }; execvp(cd[0], cd); return 0; }
I execute it after compiling using ./file
and my terminal output is,
rahul@Inspiron:~/Desktop$ g++ -Wno-write-strings file.cpp -o file rahul@Inspiron:~/Desktop$ ./file rahul@Inspiron:~/Desktop$
Current directory didn’t change to /etc
. I have tried changing cd /etc
to cd ..
, cd some_directory
in file.cpp
but no success.
Please point out what I’m doing wrong.
Advertisement
Answer
Each process has its own current directory.
When you run /bin/bash -c "cd /etc"
Bash starts up, changes its current directory, then exits. This happens regardless of whether you run it with exec
, or fork
then exec
, or system
, or by typing it into a shell, or some other way.
It has no effect on the current directory of the shell you ran it from.