Bash 远程ssh命令,标准输出上缺少LF

Bash 远程ssh命令,标准输出上缺少LF,bash,ssh,remote-access,Bash,Ssh,Remote Access,这是我的第一个问题:) 我在运行远程SSH命令时遇到问题。问题是命令的输出以字符串形式返回,而不使用LF来分隔线。我自己检查了Hive的输出,它正常地输出LFs,当我从远程主机运行命令时,它们丢失了。有没有办法维护远程主机的输出 下面是一段代码: #!/bin/bash partition="2013-04-02" query=$(cat <<EOF set mapred.job.name="Unique IP - $partition"; select distinct src ,

这是我的第一个问题:)

我在运行远程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
#/bin/bash
分区=“2013-04-02”
查询=$(cat output.tsv

围绕
ssh…
的倒勾符号正在将换行符转换为空格,因为它们应该是空格

试一试

在那里有换行符,但是您没有看到它们,因为在
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

感谢您的帮助!这是一个简单的解决方案!不,倒勾不转换任何内容。由于缺少引号,执行空格转换的是
echo$ssh
ssh user@hadoop "hive -S -e '$query' " >&output.tsv