Shell-Script
如何將 vsftpd 版本放入 shell 變數?
我想將 vsftpd 版本放入 shell 變數中。我可以輕鬆地將其用於控制台:
# 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
因此,您可能需要對to進行相當不尋常的重定向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 分別代表標準輸入/標準輸出/標準錯誤)。