Hi all,
This is Takahiro Kujirai.
When I typed "nginx -v > /tmp/nginx.txt" on nginx 1.9.11, I found output
is in stderr.
---
[root@localhost ~]# nginx -v > /tmp/nginx.txt
nginx version: nginx/1.9.11
[root@localhost ~]#
[root@localhost ~]# nginx -v 2> /tmp/nginx.txt
[root@localhost ~]# cat /tmp/nginx.txt
nginx version: nginx/1.9.11
I read source code(line374-434 of
https://github.com/nginx/nginx/blob/master/src/core/nginx.c),
I found using ngx_write_stderr.
---
static void
ngx_show_version_info()
{
ngx_write_stderr("nginx version: " NGINX_VER_BUILD NGX_LINEFEED);
if (ngx_show_help) {
ngx_write_stderr(
"Usage: nginx [-?hvVtTq] [-s signal] [-c filename] "
"[-p prefix] [-g directives]" NGX_LINEFEED
NGX_LINEFEED
"Options:" NGX_LINEFEED
" -?,-h : this help" NGX_LINEFEED
" -v: show version and exit" NGX_LINEFEED
" -V: show version and configure options then
exit"
NGX_LINEFEED
" -t: test configuration and exit" NGX_LINEFEED
" -T: test configuration, dump it and exit"
NGX_LINEFEED
" -q: suppress non-error messages "
"during configuration testing" NGX_LINEFEED
" -s signal : send signal to a master process: "
"stop, quit, reopen, reload" NGX_LINEFEED
#ifdef NGX_PREFIX
" -p prefix : set prefix path (default: " NGX_PREFIX ")"
NGX_LINEFEED
#else
" -p prefix : set prefix path (default: NONE)"
NGX_LINEFEED
#endif
" -c filename : set configuration file (default: "
NGX_CONF_PATH
")" NGX_LINEFEED
" -g directives : set global directives out of configuration "
"file" NGX_LINEFEED NGX_LINEFEED
);
}
if (ngx_show_configure) {
#ifdef NGX_COMPILER
ngx_write_stderr("built by " NGX_COMPILER NGX_LINEFEED);
#endif
#if (NGX_SSL)
if (SSLeay() == SSLEAY_VERSION_NUMBER) {
ngx_write_stderr("built with " OPENSSL_VERSION_TEXT
NGX_LINEFEED);
} else {
ngx_write_stderr("built with " OPENSSL_VERSION_TEXT
" (running with ");
ngx_write_stderr((char *) (uintptr_t)
SSLeay_version(SSLEAY_VERSION));
ngx_write_stderr(")" NGX_LINEFEED);
}
#ifdef SSL_CTRL_SET_TLSEXT_HOSTNAME
ngx_write_stderr("TLS SNI support enabled" NGX_LINEFEED);
#else
ngx_write_stderr("TLS SNI support disabled" NGX_LINEFEED);
#endif
#endif
ngx_write_stderr("configure arguments:" NGX_CONFIGURE
NGX_LINEFEED);
}
}
I think "stdout" is good, not "stderr", is this the design?
And I created patch for this problem.
---
[root@localhost ~]# diff -u ./src/core/nginx.c ./src2/core/nginx.c
--- ./src/core/nginx.c2016-02-10 22:56:57.915997223 +0900
+++ ./src2/core/nginx.c2016-02-09 23:11:57.0 +0900
@@ -374,10 +374,10 @@
static void
ngx_show_version_info()
{
-ngx_write_stdout("nginx version: " NGINX_VER_BUILD NGX_LINEFEED);
+ngx_write_stderr("nginx version: " NGINX_VER_BUILD NGX_LINEFEED);
if (ngx_show_help) {
-ngx_write_stdout(
+ngx_write_stderr(
"Usage: nginx [-?hvVtTq] [-s signal] [-c filename] "
"[-p prefix] [-g directives]" NGX_LINEFEED
NGX_LINEFEED
@@ -409,27 +409,27 @@
if (ngx_show_configure) {
#ifdef NGX_COMPILER
-ngx_write_stdout("built by " NGX_COMPILER NGX_LINEFEED);
+ngx_write_stderr("built by " NGX_COMPILER NGX_LINEFEED);
#endif
#if (NGX_SSL)
if (SSLeay() == SSLEAY_VERSION_NUMBER) {
-ngx_write_stdout("built with " OPENSSL_VERSION_TEXT
NGX_LINEFEED);
+ngx_write_stderr("built with " OPENSSL_VERSION_TEXT
NGX_LINEFEED);
} else {
-ngx_write_stdout("built with " OPENSSL_VERSION_TEXT
+ngx_write_stderr("built with " OPENSSL_VERSION_TEXT
" (running with ");
-ngx_write_stdout((char *) (uintptr_t)
+ngx_write_stderr((char *) (uintptr_t)
SSLeay_version(SSLEAY_VERSION));
-ngx_write_stdout(")" NGX_LINEFEED);
+ngx_write_stderr(")" NGX_LINEFEED);
}
#ifdef SSL_CTRL_SET_TLSEXT_HOSTNAME
-ngx_write_stdout("TLS SNI support enabled" NGX_LINEFEED);
+ngx_write_stderr("TLS SNI support enabled" NGX_LINEFEED);
#else
-ngx_write_stdout("TLS SNI support disabled" NGX_LINEFEED);
+ngx_write_stderr("TLS SNI support disabled" NGX_LINEFEED);
#endif
#endif
-ngx_write_stdout("configure arguments:" NGX_CONFIGURE
NGX_LINEFEED);
+ngx_write