首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >远程ssh命令,STDOUT上缺少LF

远程ssh命令,STDOUT上缺少LF
EN

Stack Overflow用户
提问于 2013-04-29 11:09:23
回答 2查看 1.8K关注 0票数 1

这是我在这里的第一个问题:)

我在运行远程SSH命令时遇到了一个问题。问题是该命令的输出返回到一个字符串中,没有LF来分隔这些行。我自己检查了Hive的输出,它正常地输出了LFs,当我从远程主机运行命令时,它们丢失了。有没有办法维护远程主机的输出?

下面是一段代码:

代码语言:javascript
复制
#!/bin/bash
partition="2013-04-02"
query=$(cat <<EOF
set mapred.job.name="Unique IP - $partition";
select
distinct
src
,dst
,service
,proto
,action
from
logs
where
src rlike "^10\."
and src not rlike "^10\.90\."
and src not rlike "^10[0-9]\."
and src not rlike "\.5[2-8]$"
and dst <> ""
and day="$partition";
EOF)

ssh=`ssh user@hadoop "hive -S -e '$query' 2>&1"
echo $ssh > output.tsv
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-04-29 11:49:01

其中有换行符,但是您看不到它们,因为您的echo命令中的参数扩展没有用双引号括起来。

代码语言:javascript
复制
echo "$ssh" >output.tsv

ETA:用于命令替换的$(...)语法通常比...语法好得多,因为它使用嵌套引号嵌套并正常工作。虽然在这种情况下这并不重要,但养成引用命令替换的习惯也是很好的:

代码语言:javascript
复制
ssh="$(ssh user@hadoop "hive -S -e '$query' 2>&1")"

请注意,$(..)中的双引号不会导致外部引号出现任何问题。

最后,如果您对该值所做的只是将其回显到一个文件中,则可以跳过该变量,并在第一时间将其重定向到该文件中:

代码语言:javascript
复制
ssh user@hadoop "hive -S -e '$query' 2>&1" >output.tsv

或者只是

代码语言:javascript
复制
ssh user@hadoop "hive -S -e '$query' " >&output.tsv
票数 2
EN

Stack Overflow用户

发布于 2013-04-29 11:19:44

ssh …周围的反标记会将换行符转换为空格,因为它们理应如此。

试一试

代码语言:javascript
复制
ssh user@hadoop "hive -S -e '$query' 2>&1" > output.tsv
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16270668

复制
相关文章

相似问题

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