vsftpdバージョンをシェル変数にどのように入れますか?

vsftpdバージョンをシェル変数にどのように入れますか?

vsftpdのバージョンをシェル変数に入れたいです。これをコンソールに簡単に送信できます。

# vsftpd -version
vsftpd: version 2.2.2

変数に入れることができる他の情報もたくさんあります。

# i=`bash --version 2>&1 | head -n1`; echo "=$i=";
=GNU bash, version 4.1.2(1)-release (x86_64-redhat-linux-gnu)=

(出力は「=」記号の間にあります。)この簡単な方法はvsftpdでは機能しません。

# i=`vsftpd -version 2>&1`; echo "=$i=";
vsftpd: version 2.2.2
==

ここで $i は "" です。

私は何が間違っていましたか?

答え1

興味深いことに、私はvsftpdversino文字列をstdin。したがって、stdin次に多少珍しいリダイレクトを実行する必要があるかもしれませんstdout

i=`/usr/sbin/vsftpd -version 0>&1`

検索方法:実行してstrace(ルートで実行する必要があります)、文字列を確認します。私の場合、ログは次のように終了します。

$ strace /usr/sbin/vsftpd -version
...
brk(0)                                  = 0x7f835332d000
brk(0x7f835334e000)                     = 0x7f835334e000
write(0, "vsftpd: version 3.0.2\n", 22) = 22
exit_group(0)                           = ?
+++ exited with 0 +++

最初のパラメータwrite()はファイル記述子です(0/1/2はそれぞれstdin / stdout / stderrを表します)。

答え2

このコマンドはvsftpd -v標準入力を使用するため、通常の方法では出力を取得できません。

私は通常FTPポートから応答を受け取ります。とにかくローカルFTPのみを許可します。

echo "bye" | nc localhost 21

関連情報