私は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
アプリケーションがその特定のファイル記述子に送信された出力を削除することを意図することもできます。