2013-01-10 126 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而不是截斷+覆蓋它,則使用「>>」 –