远程ssh命令,STDOUT上缺少LF

时间:2013-04-29 03:09:23

标签: bash ssh remote-access

这是我的第一个问题:)

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

以下是代码片段:

#!/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

2 个答案:

答案 0 :(得分:2)

那里有换行符,但你没有看到它们,因为你的echo命令中的参数扩展没有双引号。

echo "$ssh" >output.tsv

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

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

答案 1 :(得分:0)

ssh …周围的反引号正在将你的换行转换为空格,因为它们应该是。

尝试

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