1

我只是想收集有关系统的信息,特别是主机名、操作系统和 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
4

2 回答 2

2

ssh -V确实将其输出打印到stderrnot to stdout。要获得所需的输出,您需要更改

SSH_VER=$(ssh -V)

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

这将重定向到 to 的stderr输出stdout

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

于 2013-01-10T18:32:33.667 回答
1

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

 SSH_VER="$(ssh -V 2>&1)"
 echo "$HOSTNAME $OS $SSH_VER" > ssh.log #in case it's multiline
于 2013-01-10T18:33:26.180 回答