このメッセージはどこに印刷されましたか? [コピー]

このメッセージはどこに印刷されましたか? [コピー]

私はAlpine Linuxで作業していますが、シェルの次の動作を理解できませんsh

/ # vsftpd /etc/vsftpd/vsftpd.conf > /dev/null
500 OOPS: bad bool value in config file for: hide_ids
/ # vsftpd /etc/vsftpd/vsftpd.conf 2> /dev/null
500 OOPS: bad bool value in config file for: hide_ids

メッセージはどこに印刷されますか?はいstdout、それともstderr

ベストアンサー1

ソースはvsftpd定数をVSFTP_COMMAND_FD数値 0 として定義します。これは間違ったファイル記述子が書かれたものです。

$ grep -F VSFTP_COMMAND_FD defs.h
#define VSFTP_COMMAND_FD        0

どんなに奇妙に見えるかもしれませんが、コードは標準にエラーメッセージを書いています。入力する小川。

void
bug(const char* p_text)
{
  /* Rats. Try and write the reason to the network for diagnostics */
  vsf_sysutil_activate_noblock(VSFTP_COMMAND_FD);
  (void) vsf_sysutil_write_loop(VSFTP_COMMAND_FD, "500 OOPS: ", 10);
  (void) vsf_sysutil_write_loop(VSFTP_COMMAND_FD, p_text,
                                vsf_sysutil_strlen(p_text));
  (void) vsf_sysutil_write_loop(VSFTP_COMMAND_FD, "\r\n", 2);
  vsf_sysutil_exit(2);
}

テスト:

$ ./vsftpd >/dev/null
500 OOPS: vsftpd: must be started as root (see run_as_launching_user option)
$ ./vsftpd 2>/dev/null
500 OOPS: vsftpd: must be started as root (see run_as_launching_user option)
$ ./vsftpd </dev/null
$

したがって、/dev/nullアプリケーションにリダイレクトするとエラーがなくなります。また、それを使用して、0>/dev/nullアプリケーションがその特定のファイル記述子に送信された出力を削除することを意図することもできます。

おすすめ記事