执行命令而不是在bash中设置为变量

时间:2013-01-10 18:26:51

标签: bash variables

我只是想收集有关系统的信息,特别是主机名,操作系统和SSH版本。我创建了以下脚本,它设置了主机名和操作系统,但不是将SSH命令设置为变量,而是执行它,我无法弄清楚原因。

这是脚本

#! /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 个答案:

答案 0 :(得分:2)

ssh -V会将其输出打印到stderr而不是stdout。要获得所需的输出,您需要更改

SSH_VER=$(ssh -V)

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

这将重定向到stderrstdout的输出。

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

答案 1 :(得分:1)

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

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