Como posso obter a versão vsftpd na variável shell?

2

Eu quero obter a versão vsftpd na variável shell. Eu consigo consertar com facilidade:

# vsftpd -version
vsftpd: version 2.2.2

Também posso adicionar muitas outras informações à variável:

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

(note que a saída está entre os sinais "="). Essa maneira simples não funciona com o vsftpd:

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

Por favor, note que $ i é "" aqui.

O que estou fazendo de errado?

    
por Putnik 19.11.2012 / 14:31

2 respostas

4

Curiosamente, meu vsftpd escreve a string do versino para stdin . Então você provavelmente precisará fazer um redirecionamento bastante incomum de stdin para stdout :

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

Como descobrir isso: execute-o em strace (você precisará fazer isso como root) e verifique a string. No meu caso, o log termina assim:

$ 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 +++

O primeiro argumento para write() é o descritor de arquivo (0/1/2 representa stdin / stdout / stderr respectivamente).

    
por 19.11.2012 / 17:11
0

O comando vsftpd -v usa stdin para que você não possa pegar a saída da maneira normal.

Eu costumo pegar a resposta da porta FTP. Eu só permito FTP localmente de qualquer maneira.

echo "bye" | nc localhost 21

    
por 06.12.2013 / 01:33