通过execvp:StrictHostKeyChecking=no:unknown选项运行rsync
run rsync through execvp: StrictHostKeyChecking=no: unknown option
我正试图通过带有StrictHostKeyChecking选项的execvp运行rsync。这是我的代码:
#include <unistd.h>
int main() {
char *argv[] = {"rsync",
"remote_user@1.2.4.5:/tmp",
"/home/tmp/",
"-e 'ssh -o StrictHostKeyChecking=no'",
0};
execvp("rsync", argv);
}
我得到这个错误:
rsync:-e'-o StrictHostKeyChecking=no':未知选项rsync错误:语法或用法错误(代码1(在main.c(1422([client=3.06]
我尝试了另一种方式:
#include <unistd.h>
int main() {
char *argv[] = {"rsync",
"remote_user@1.2.4.5:/tmp",
"/home/tmp/",
"-e",
"'ssh -o StrictHostKeyChecking=no'",
0};
execvp("rsync", argv);
}
但现在它失败了,出现了错误:
rsync:无法执行ssh-o StrictHostKeyChecking=no:没有这样的文件或目录(2(rsync错误:管道.c(84([sender=3.0.6]上的IPC代码(代码14(错误
为什么它不理解StrictHostKeyChecking选项?
rsync
希望首先接收选项,然后接收主机。您正在反向执行:首先需要指定-e
和-o
。
您也不应该单独引用-o
选项:这是从bash调用它时所必需的,以防止bash解释参数并将它们拆分为单独的argv[]
条目。想想看:当bash
看到'-o StrictHostKeyChecking=no'
时,它将-o StrictHostKeyChecking=no
作为一个单独的argv[]
条目传递,而不使用单引号(因为单引号是告诉shell您不希望拆分参数的方法(。
最后,但同样重要的是,您应该检查execvp(3)
没有失败。
所以,这就是你需要的:
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
int main() {
char *argv[] = {
"rsync",
"-e",
"ssh -o StrictHostKeyChecking=no",
"remote_user@1.2.4.5:/tmp",
"/home/tmp/",
NULL
};
if (execvp("rsync", argv) < 0) {
perror("rsync(1) error");
exit(EXIT_FAILURE);
}
return 0;
}
相关文章:
- 从 C++ 运行的进程偶尔会错过某个选项
- Bash 自动完成一个选项,而不运行应用程序
- C++项目编译强制使用 /clr 选项,尽管在没有公共语言运行时支持的情况下执行它
- 为使用p4api运行的Perforce命令指定全局选项
- C++编译时/运行时选项和参数,如何处理?
- 在任务管理器的应用程序选项卡中获取运行任务的列表
- c++ 运行时库选项
- 是否有在Qt中第二次运行相同程序的选项
- 如何在选择错误选项时保持程序运行而不退出
- 如何在运行时从 Glade 定义添加 Gtk::笔记本选项卡
- 我的程序编译并运行,但没有执行 switch 语句中的 6 个选项中的任何一个,我无法弄清楚原因
- 是否有一个 GNU C 编译器选项可以生成运行速度更快但精度低于默认设置的浮点程序
- osX :运行循环选项(创建事件点击时)
- Boost库构建-运行时链接和链接选项之间的差异
- GCC '-M32' 选项在不运行 Valgrind 时更改浮点舍入
- 更改运行时库选项对运行时链接的影响
- Dll与静态库(MSVC9运行时库选项)
- 通过execvp:StrictHostKeyChecking=no:unknown选项运行rsync
- 我将如何提示用户为他们提供在C++中重新运行程序的选项
- 在运行时单击QTabWidget将内容加载到选项卡中