我只是想收集有关系统的信息,特别是主机名,操作系统和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
答案 0 :(得分:2)
ssh -V
会将其输出打印到stderr
而不是stdout
。要获得所需的输出,您需要更改
SSH_VER=$(ssh -V)
到
SSH_VER=$(ssh -V 2>&1)
这将重定向到stderr
到stdout
的输出。
访问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