1

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

我在运行远程 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
4

2 回答 2

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
于 2013-04-29T03:49:00.927 回答
0
于 2013-04-29T03:19:44.030 回答