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が ""であることに注意してください。
私は何が間違っているのですか?
興味深いことに、私のvsftpd
はversino文字列をstdin
に書き込みます。したがって、おそらくstdin
からstdout
へのかなり珍しいリダイレクトを行う必要があります。
_i=`/usr/sbin/vsftpd -version 0>&1`
_
これを見つける方法:strace
で実行し(rootとして実行する必要があります)、文字列を確認します。私の場合、ログは次のように終了します:
_$ 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を表します)。
コマンド vsftpd -v
はstdinを使用するため、通常の方法では出力を取得できません。
私は通常、FTPポートから応答を取得するだけです。とにかくローカルでのみFTPを許可します。
echo "bye" | nc localhost 21