Опитвам се да стартирам 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 грешка: грешка в синтаксиса или използването (код 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