我简直是在扯头发。我正在尝试为我的 IRC 机器人创建远程 shell 执行,但是,当我使用诸如“ls”或“cd”之类的命令时,我得到了“: not found”的返回,然而,其他命令,如 mkdir 或echo 似乎工作正常。当我对命令进行硬编码时也是如此,我得到的输出与它应该的完全一样。
谁能看出原因?这是我的代码:
FILE *fp;
int status;
char path[1035];
/* Open the command for reading. */
fp = popen(ptr1, "r"); // hard code command and it works ????fp = popen("/bin/ls /etc/", "r");
printf("%s", ptr1);//check received command (debugging)
if (fp == NULL) {
printf("Failed to run command\n" );
出于道德原因删除了一些代码。
最佳答案
我会从您的错误消息中猜测您在传递给 popen 的字符串中有一个虚假的回车符。因此,您实际上是在调用,例如 popen("ls\r", "r");
失败并显示错误消息 ls\r: not found
。当您打印该错误消息时,回车会导致它跳回到该行的开头,看起来像 : not found
回车是像这样的奇怪错误的臭名昭著的来源,因为它们不是 shell 的空白,但是当你打印它们时你无法真正看到它们。
关于c - 远程执行shell命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14587340/