1

システム、特にホスト名、OS、SSH バージョンに関する情報を収集しようとしているだけです。次のスクリプトを作成し、ホスト名とOSを設定しますが、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はその出力を to stderrnot to に出力しstdoutます。目的の出力を得るには、変更する必要があります

SSH_VER=$(ssh -V)

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

stderrこれはtoの出力にリダイレクトされますstdout

bash リダイレクトの詳細については、http: //www.tldp.org/LDP/abs/html/io-redirection.htmlにアクセスしてください。

于 2013-01-10T18:32:33.667 に答える
1

ssh -v は、stdout (>&1) ではなく、stderr (>&2) に出力します。試す:

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