I want to make some C++ program and I'm using function popen
here to send commands to command line in Unix. It works fine, but when I call cd directory
, the directory doesn't change. I thing that it's same when I try to run cd directory
in some script, after finishing script directory path change back. So, scripts I must run like . ./script.sh
not ./sript.sh
, but how to do that with popen
function? I have tried to add ". "
before first argument of popen
, but running ". ls"
makes error.
Code:
cout << "@ Command from " << session->target().full() << ": " << message.body() << endl;
//cout << "Prisla zprava" << endl;
//m_session->send( "Hello World", "No Subject" );
//system( message.body().c_str() );
//if ( message.body() == "" )
FILE* outp;
char buffer[100];
string outps = "";
outp = popen( message.body().c_str(), "r" );
while ( !feof(outp) )
{
fgets( buffer, 100, outp );
outps = outps + buffer;
}
pclose(outp);
cout << "& Output from command: " << outps << endl;
m_session->send( outps.c_str(), "Output" );
In message.body();
is string
which I want to run (I'm receiving this from XMPP
). When the string
is for example "ls"
, it returns string
with list of files in actual directory. But when the message is "cd directory"
, nothing happens, like trying to change directory in scripts.