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を表します)。

おすすめ記事