2011-01-04 2 views
0

Я использую систему() для запуска команд некоторых Unix из моего приложения с кодом, как следующее:Почему система() жалуется, что cwd неизвестен?

std::stringstream command; 

command << "rm -rf /some/directory"; 

int rmResult = system(command.str().c_str()); 

if (rmResult != 0) { 
    clog << "Error: Failed to remove old output directory '" << command.str() 
     << "' (" << errno << ") " << strerror(errno) << ".\n"; 
    throw; 
} 

Однако, в то время как rmResult равна нуль, а ют работаю, я получаю эту ошибку в консоли:

shell-init: error retrieving current directory: getcwd: cannot access parent directories: No such file or directory 

Что я делаю неправильно, и как я могу заставить это сообщение уйти?

+0

Почему вы так делаете это в первую очередь? Почему бы просто не использовать собственные конструкты для вставки каталога и его содержимого? – richo

+0

Я делаю кучу разных команд, поэтому просто проще использовать system(). – WilliamKF

+3

Если вы создаете скрипт оболочки, почему бы не использовать сценарий оболочки? – dreamlax

ответ

2

По-видимому, это связано с тем, что у меня теперь есть каталог, который теперь находится в моем стеке pushd, хотя это был не текущий рабочий каталог. Очистка моего стека в уже запущенном каталоге заставила сообщения уйти.

+0

Да, я видел эту причуду раньше, и, похоже, это происходит только тогда, когда я буду использовать определенные оболочки. IIRC, это произошло для меня в bash, но не tcsh. – Tim

+0

@ Тит, я в bash, так что, похоже, подтверждаю ваше воспоминание. – WilliamKF