远程控制台与本地脚本执行tail命令结果不一致的解决求助
解决远程SSH命令输出换行丢失的问题
问题原因
你遇到的换行丢失是因为Bash的单词拆分机制:当执行echo ${result}时,未加引号的变量会被Bash按空白字符(包括换行、空格)拆分,最终输出时用空格拼接所有拆分后的内容,导致原本的换行被替换成空格。
解决方案
方案1:给echo的变量添加双引号
修改脚本中的echo行,用双引号包裹变量,保留原始格式:
#!/bin/bash result=`ssh -p 27 myremoteserver "tail \"/usr/tmp/mylogfile.log\""` echo "${result}"
方案2:直接执行SSH命令,不存变量
如果不需要对远程输出做额外处理,直接让SSH命令的输出打印到本地终端,天然保留换行:
#!/bin/bash ssh -p 27 myremoteserver "tail \"/usr/tmp/mylogfile.log\""
方案3:使用printf输出变量
如果需要更灵活的输出控制,可用printf,同样需用双引号包裹变量:
#!/bin/bash result=`ssh -p 27 myremoteserver "tail \"/usr/tmp/mylogfile.log\""` printf "%s" "${result}"
内容的提问来源于stack exchange,提问作者Ralph F
相关产品推荐
相关产品推荐

