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:
JavaScript
x
#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,
JavaScript
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.