【问题标题】:How does one get the raw command line in C under Linux?如何在 Linux 下获得 C 语言中的原始命令行?
【发布时间】:2013-11-09 11:59:56
【问题描述】:

我正在尝试创建一个简单的 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);
}

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

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

我得到这样的输出:

./argvdump something other things

这对于调试不是很有用,因为我看不到命令​​行上的实际内容。

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

【问题讨论】:

    标签: c parsing command-line


    【解决方案1】:

    操作系统(或更具体地说是外壳)是执行诸如删除空格和引号之类的操作的部分。无法重建包括所有这些工件在内的整个命令行。

    您可以假设如果 argv 成员包含一个空格,那么最初它周围有引号...

    【讨论】:

    • @user2780684 在所有内容中加上引号是徒劳的,因为您的程序只会看到一个长参数。您正在尝试解决错误的问题。 Shell 的引号删除与您或任何程序无关。他们不知道,也不想知道。您遇到的实际问题是什么?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多