首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >执行命令,而不是在bash中设置为变量

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

Stack Overflow用户
提问于 2013-01-11 02:26:51
回答 2查看 520关注 0票数 1

我只是尝试收集有关系统的信息,特别是主机名、操作系统和SSH版本。我创建了以下脚本,它设置了主机名和操作系统,但是它不是将SSH命令设置为变量,而是执行它,我不知道为什么。

这是脚本

代码语言:javascript
复制
#! /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

以下是脚本的输出...

代码语言:javascript
复制
+ 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
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-01-11 02:32:34

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

代码语言:javascript
复制
SSH_VER=$(ssh -V)

至

代码语言:javascript
复制
SSH_VER=$(ssh -V 2>&1)

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

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

票数 2
EN

Stack Overflow用户

发布于 2013-01-11 02:33:26

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

代码语言:javascript
复制
 SSH_VER="$(ssh -V 2>&1)"
 echo "$HOSTNAME $OS $SSH_VER" > ssh.log #in case it's multiline
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14264763

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档