2013-01-10 57 views
1

我只是试图收集有关系统的信息,特别是主机名,操作系统和SSH版本。我创建了以下脚本,它设置了主机名和操作系统,但不是将SSH命令设置为变量,而是执行它,我找不到原因。执行命令,而不是在bash中设置为变量

这里是脚本

#! /bin/bash 

set -o xtrace 
rm -f ssh.log 
HOSTNAME=$(hostname) 
OS=$(uname -s) 
SSH_VER=$(ssh -V) 

echo $HOSTNAME $OS $SSH_VER > ssh.log 

cat ssh.log 

下面是脚本的输出...

+ rm -f ssh.log 
++ hostname 
+ HOSTNAME=localhost.localdomain 
++ uname -s 
+ OS=Linux 
++ ssh -V OpenSSH_5.3p1, OpenSSL 1.0.0-fips 29 Mar 2010 
+ SSH_VER= 
+ echo localhost.localdomain Linux 
+ cat ssh.log localhost.localdomain Linux 

回答

2

ssh -V并打印输出到stderrstdout。为了得到所需的输出,你需要改变

SSH_VER=$(ssh -V) 

SSH_VER=$(ssh -V 2>&1) 

这将重定向到的stderr输出stdout

有关bash重定向的更多信息,请访问http://www.tldp.org/LDP/abs/html/io-redirection.html

+0

就是这样! shell脚本的细微之处在于至少要说 – user1967720

1

stderr上的ssh -v输出(> & 2),而不是标准输出(> & 1)。 尝试:

SSH_VER="$(ssh -V 2>&1)" 
echo "$HOSTNAME $OS $SSH_VER" > ssh.log #in case it's multiline 
+0

如果你只是想追加到ssh.log而不是截断+覆盖它,则使用“>>” –