Put*_*nik 4 io-redirection shell-script stdout output vsftpd
我想将 vsftpd 版本放入 shell 变量中。我可以轻松获得它的控制台:
# vsftpd -version
vsftpd: version 2.2.2
Run Code Online (Sandbox Code Playgroud)
我也可以将很多其他信息放入变量中:
# i=`bash --version 2>&1 | head -n1`; echo "=$i=";
=GNU bash, version 4.1.2(1)-release (x86_64-redhat-linux-gnu)=
Run Code Online (Sandbox Code Playgroud)
(请注意输出在“=”符号之间)。这种简单的方法不适用于 vsftpd:
# i=`vsftpd -version 2>&1`; echo "=$i=";
vsftpd: version 2.2.2
==
Run Code Online (Sandbox Code Playgroud)
请注意这里的 $i 是 ""。
我究竟做错了什么?
有趣的是,我vsftpd
将 versino 字符串写入stdin
. 所以,你可能需要做的是相当不寻常重定向stdin
到stdout
:
i=`/usr/sbin/vsftpd -version 0>&1`
Run Code Online (Sandbox Code Playgroud)
如何找出这一点:运行它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 +++
Run Code Online (Sandbox Code Playgroud)
第一个参数write()
是文件描述符(0/1/2 分别代表 stdin/stdout/stderr)。
归档时间: |
|
查看次数: |
16971 次 |
最近记录: |