如何在Linux下用C语言获取原始命令行?

3

我正在尝试创建一个简单的C程序来转储原始命令行,以调试调用其他程序的程序的输出。以下是我目前的代码:

#include <stdio.h> 

int main (int argc, char **argv)
{
    int i;

    for (i = 0; i < argc; i++)
        fprintf (stderr, "%s ", argv[i]);
    fputs ("\n", stderr);
    return (0);
}

这种方法有几个问题。首先,我必须在每个参数后手动插入一个空格。其次,原始命令中的引号会丢失,因此输入如下所示:

./argvdump "'something'" """'"'""""other things""""'"'"""

I get output like this:

./argvdump something other things

这对于调试来说并不是非常有用,因为我无法看到实际在命令行上的内容。

有人知道如何获取实际的原始命令行吗?

1个回答

2

操作系统(或更具体地说,shell)负责去除空格和引号等内容。无法重构包括所有这些元素的整个命令行。

如果一个argv成员包含一个空格,则可以假设它最初有引号...


1
@user2780684 把所有东西都加上引号是徒劳无功的,因为你的程序只会看到一个长参数。你正在试图解决错误的问题。Shell 的引号移除不是你或任何程序的业务。它们不知道也不想知道。你真正的问题是什么? - Jens

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接