Я пытаюсь запустить rsync через execvp с параметром StrictHostKeyChecking. Это мой код:
#include <unistd.h>
int main() {
char *argv[] = {"rsync",
"[email protected]:/tmp",
"/home/tmp/",
"-e 'ssh -o StrictHostKeyChecking=no'",
0};
execvp("rsync", argv);
}
Я получаю эту ошибку:
rsync: -e '-o StrictHostKeyChecking=no': неизвестная опция rsync error: синтаксическая ошибка или ошибка использования (код 1) в main.c(1422) [client=3.0.6]
Я пробовал другой способ:
#include <unistd.h>
int main() {
char *argv[] = {"rsync",
"[email protected]:/tmp",
"/home/tmp/",
"-e",
"'ssh -o StrictHostKeyChecking=no'",
0};
execvp("rsync", argv);
}
Но теперь он терпит неудачу с ошибкой:
rsync: не удалось выполнить ssh -o StrictHostKeyChecking=no: нет такого файла или каталога (2) ошибка rsync: ошибка в коде IPC (код 14) в pipe.c(84) [sender=3.0.6]
Почему он не понимает опцию StrictHostKeyChecking?
execvp
ожидает, что это будет разделено на аргументы, как это сделала бы оболочка. Так что перемещение-e
в свою собственную вещь идет в правильном направлении. Затем я бы попытался удалить одинарные кавычки вокруг аргумента ssh. Оболочка их тоже лишила бы. - person chicks   schedule 04.07.2015