Bash 远程ssh命令,标准输出上缺少LF
这是我的第一个问题:) 我在运行远程SSH命令时遇到问题。问题是命令的输出以字符串形式返回,而不使用LF来分隔线。我自己检查了Hive的输出,它正常地输出LFs,当我从远程主机运行命令时,它们丢失了。有没有办法维护远程主机的输出 下面是一段代码: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 ,
#!/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