这是我的第一个问题:)
我在运行远程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
答案 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