Я хочу написать программу на C++ и использую здесь функцию popen для отправки команд в командную строку в Unix. Он отлично работает, но когда я вызываю cd directory, каталог не меняется. Я думаю, что это то же самое, когда я пытаюсь запустить cd directory в каком-то скрипте, после завершения пути к каталогу скрипта обратно. Итак, скрипты, которые я должен запускать как . ./script.sh, а не ./sript.sh, но как это сделать с помощью функции popen? Я пытался добавить ". " перед первым аргументом popen, но запуск ". ls" приводит к ошибке.
Код:
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" );
В message.body(); есть string, который я хочу запустить (я получаю это от XMPP). Когда string, например, "ls", возвращается string со списком файлов в фактическом каталоге. Но когда сообщение "cd directory", ничего не происходит, например, попытка изменить каталог в сценариях.