Почему exec ничего не выводит, хотя через командную строку вывод есть?
Вы мануалы читаете?
php.net/manual/ru/function.exec.php
;)
как тогда curl'у указать корневую папку для сохранения файла? 
Вам тут cd вообще не нужен.$ curl --help | grep -i "\-o,"
 -o, --output <file> Write to file instead of stdout
 -O, --remote-name   Write output to a file named as the remote file