首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >远程执行shell命令

远程执行shell命令
EN

Stack Overflow用户
提问于 2013-01-30 00:20:24
回答 2查看 917关注 0票数 0

我简直是在扯我的头发。我正在尝试为我的IRC bot创建远程shell执行,然而,当我使用诸如"ls“或"cd”之类的命令时,我得到的返回值是":not found“,然而,诸如mkdir或echo之类的其他命令似乎工作得很好。当我对命令进行硬编码时也是如此,我得到的输出是完全正确的。

有谁知道为什么吗?下面是我的代码:

代码语言:javascript
复制
            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" );

出于道德原因删除了一些代码。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-01-30 01:05:17

在上面的代码中,ptr1没有初始化。假设ptr1是您的命令,并在其他地方填充,您是否检查了字符串是否在正确的位置以零结尾?即使使用printf,一些不可打印的字符也可能在字符串的末尾和零终止之间,因此您会有"ls___“。只需对ptr1长度进行快速的健全性检查:

printf("%s : %lu", ptr1, strlen(ptr1));

票数 1
EN

Stack Overflow用户

发布于 2013-01-30 01:11:27

我可以从您的错误消息中猜测,您传递给popen的字符串中有一个虚假的回车。所以你实际上是在调用,例如popen("ls\r", "r");,它失败了,错误消息是ls\r: not found。当您打印该错误消息时,回车符将使它跳回到行首,看起来像: not found

回车是这类奇怪错误的一个臭名昭著的来源,因为它们对于shell来说不是空格,但是当您打印它们时,您并不能真正看到它们。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14587340

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档