这是我在这里的第一个问题:)
我在运行远程SSH命令时遇到了一个问题。问题是该命令的输出返回到一个字符串中,没有LF来分隔这些行。我自己检查了Hive的输出,它正常地输出了LFs,当我从远程主机运行命令时,它们丢失了。有没有办法维护远程主机的输出?
下面是一段代码:
#!/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发布于 2013-04-29 11:49:01
其中有换行符,但是您看不到它们,因为您的echo命令中的参数扩展没有用双引号括起来。
echo "$ssh" >output.tsvETA:用于命令替换的$(...)语法通常比...语法好得多,因为它使用嵌套引号嵌套并正常工作。虽然在这种情况下这并不重要,但养成引用命令替换的习惯也是很好的:
ssh="$(ssh user@hadoop "hive -S -e '$query' 2>&1")"请注意,$(..)中的双引号不会导致外部引号出现任何问题。
最后,如果您对该值所做的只是将其回显到一个文件中,则可以跳过该变量,并在第一时间将其重定向到该文件中:
ssh user@hadoop "hive -S -e '$query' 2>&1" >output.tsv或者只是
ssh user@hadoop "hive -S -e '$query' " >&output.tsv发布于 2013-04-29 11:19:44
ssh …周围的反标记会将换行符转换为空格,因为它们理应如此。
试一试
ssh user@hadoop "hive -S -e '$query' 2>&1" > output.tsvhttps://stackoverflow.com/questions/16270668
复制相似问题