Shell-Script

如何將 vsftpd 版本放入 shell 變數?

  • December 6, 2013

我想將 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 分別代表標準輸入/標準輸出/標準錯誤)。

引用自:https://unix.stackexchange.com/questions/56108