CURLOPT_VERBOSE不是';t发送到STDERR

CURLOPT_VERBOSE不是';t发送到STDERR,curl,Curl,Ubuntu20.04使用libcurl和以下代码,我可以从命令行查看输出。 但是,当重定向输出/run_me 2>&1>output.log时,cURL输出仍然显示在屏幕上,并且不会重定向到output.log文件 cURL文档说明,不设置CURLOPT\u STDERR的CURLOPT\u VERBOSE应转到STDERR。然而,似乎并非如此 如何将cURL输出重定向到STDERR CURL* curl = curl_easy_init(); char errBuff[CURL_ERROR_

Ubuntu20.04使用libcurl和以下代码,我可以从命令行查看输出。 但是,当重定向输出
/run_me 2>&1>output.log
时,cURL输出仍然显示在屏幕上,并且不会重定向到
output.log
文件

cURL文档说明,不设置
CURLOPT\u STDERR
CURLOPT\u VERBOSE
应转到
STDERR
。然而,似乎并非如此

如何将cURL输出重定向到STDERR

CURL* curl = curl_easy_init();
char errBuff[CURL_ERROR_SIZE];
if(curl) {
    struct MemoryStruct chunk;
    chunk.size = 0;
    chunk.memory = calloc(1,sizeof(*chunk.memory));
    if ( !chunk.memory ) {
      return CURLE_FAILED_INIT;
    }

    (void)curl_easy_setopt(curl, CURLOPT_URL, url);
    (void)curl_easy_setopt(curl, CURLOPT_POST, 1L);
    (void)curl_easy_setopt(curl, CURLOPT_USERNAME, username);
    (void)curl_easy_setopt(curl, CURLOPT_PASSWORD, password);
    (void)curl_easy_setopt(curl, CURLOPT_CONNECTTIMEOUT, CONNECTION_TIMEOUT);
    (void)curl_easy_setopt(curl, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
    (void)curl_easy_setopt(curl, CURLOPT_CAINFO, trustStore);
    (void)curl_easy_setopt(curl, CURLOPT_SSLCERT, clientCert);
    (void)curl_easy_setopt(curl, CURLOPT_SSLKEY, clientKey);
    (void)curl_easy_setopt(curl, CURLOPT_KEYPASSWD, clientKeyPass);
    (void)curl_easy_setopt(curl, CURLOPT_VERBOSE, 1 );
    (void)curl_easy_setopt(curl, CURLOPT_ERRORBUFFER, errBuff );
    errBuff[0] = 0; // empty the error buffer   
    (void)curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteMemoryCallback);
    (void)curl_easy_setopt(curl, CURLOPT_WRITEDATA, (void *)&chunk);

    struct curl_slist* list = NULL;
    list = curl_slist_append(NULL, "Content-Type: application/json");
    list = curl_slist_append(list, "Accept: application/json");
    char clBuf[30];
    (void)snprintf(clBuf, 30, "Content-Length: %d", (int)strlen(postData));
    list = curl_slist_append(list, clBuf);
    (void)curl_easy_setopt(curl, CURLOPT_HTTPHEADER, list);
    (void)curl_easy_setopt(curl, CURLOPT_POSTFIELDS, postData);
    long httpCode = 0;
    int res = CURLE_FAILED_INIT;
    res = curl_easy_perform(curl);
    (void)curl_easy_getinfo(curl, CURLINFO_HTTP_CODE, &httpCode);
}

答案与shell如何处理重定向的顺序有关

从bash手册:

请注意,重定向的顺序很重要。例如 命令

将标准输出和标准错误定向到文件目录列表, 当命令

  ls 2>&1 > dirlist
仅将标准输出定向到文件目录列表,因为标准 在标准输出之前,从标准输出复制了错误 输出被重定向到目录列表


将命令更改为
/run\u me>output.log 2>&1
将导致curl的详细输出也被重定向到该文件。

谢谢!我忘了Linux的警告。
  ls 2>&1 > dirlist