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
흥미롭게도 나는 vsftpd
versino 문자열을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