【问题标题】:How do I execute a Shell built-in command with a C function?如何使用 C 函数执行 Shell 内置命令?
【发布时间】:2013-10-13 02:23:47
【问题描述】:

我想通过像execv()这样的C语言函数来执行Linux命令“pwd”。

问题是没有名为“pwd”的可执行文件,我无法执行“echo $PWD”,因为 echo 也是一个内置命令,找不到可执行文件。

【问题讨论】:

标签: c shell command exec pwd


【解决方案1】:

你可以使用excel命令

int execl(const char *path, const char *arg, ...);

如图所示

#include <stdio.h>
#include <unistd.h>
#include <dirent.h>

int main (void) {

   return execl ("/bin/pwd", "pwd", NULL);

}

第二个参数将是进程的名称,因为它将出现在进程表中。

或者,您可以使用 getcwd() 函数获取当前工作目录:

#include <stdio.h>
#include <unistd.h>
#include <dirent.h>
#define MAX 255

int main (void) {
char wd[MAX];
wd[MAX-1] = '\0';

if(getcwd(wd, MAX-1) == NULL) {
  printf ("Can not get current working directory\n");
}
else {
  printf("%s\n", wd);
}
  return 0;
}

【讨论】:

    【解决方案2】:

    如果你只想在你的c程序中执行shell命令,你可以使用,

       #include <stdlib.h>
    
       int system(const char *command);
    

    在你的情况下,

    system("pwd");
    

    问题是没有名为“pwd”的可执行文件,我无法执行“echo $PWD”,因为 echo 也是一个内置命令,找不到可执行文件。

    你这是什么意思?您应该能够在 /bin/

    中找到提到的包
    sudo find / -executable -name pwd
    sudo find / -executable -name echo
    

    【讨论】:

    • 我还是新手。我尝试在 shell 上使用“which pwd”,它只返回“pwd”是一个内置命令。无论如何,谢谢!
    • 请原谅我可能的无知,但这只会返回返回码而不是标准输出,对吗?
    • @Jpatrick 你是对的。 system 有助于执行 shell 命令,还可以通过其他几个系统调用来读取返回码。如果要读取程序的标准输出,需要使用 popen() 代替:gnu.org/software/libc/manual/html_node/…
    【解决方案3】:

    你应该执行sh -c echo $PWD;一般sh -c会执行shell命令。

    (事实上,system(foo) 被定义为execl("sh", "sh", "-c", foo, NULL),因此适用于 shell 内置函数。)

    如果您只想要PWD 的值,请使用getenv

    【讨论】:

    • 我使用了 getenv 函数。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-18
    • 2011-08-23
    • 2014-04-24
    • 2014-09-19
    • 2011-01-18
    • 2015-01-03
    相关资源
    最近更新 更多