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

관련 정보