使用命令替换获取Redis配置文件路径后执行cat命令报错,怀疑Shell丢弃字符串的问题求助
使用命令替换获取Redis配置文件路径后执行cat命令报错,怀疑Shell丢弃字符串的问题求助
我在尝试通过Redis CLI获取配置文件路径后直接用cat查看该文件时遇到了奇怪的报错,具体操作和输出如下:
[root@es01 ~]# redis-cli -h IP_ADDRESS -p 6380 -a admin info 2>/dev/null|grep config_file|cut -d: -f2 /opt/redis/7.0.5/cluster/redis-6380.conf [root@es01 ~]# cat $(redis-cli -h IP_ADDRESS -p 6380 -a admin info 2>/dev/null|grep config_file|cut -d: -f2) : No such file or directoryer/redis-6380.conf
从错误信息能看出来,配置文件路径被截断了,最后只显示了er/redis-6380.conf,前面的部分莫名其妙丢失了,怀疑是Shell在解析命令替换结果时出了问题,有没有大佬能帮忙看看怎么解决?
可能的原因和解决方案
这种情况大概率是因为redis-cli输出的配置路径里包含了不可见的控制字符(比如回车符\r或者多余的换行符),导致Shell解析路径时出错。你可以按下面的步骤排查和解决:
先检查输出中的隐藏字符
用cat -A命令可以显示所有不可见字符,比如回车符会显示为^M,换行符显示为$:redis-cli -h IP_ADDRESS -p 6380 -a admin info 2>/dev/null | grep config_file | cut -d: -f2 | cat -A清理输出中的隐藏字符
如果发现有多余的回车或换行,用tr命令删除它们,确保路径是干净的单行字符串:cat $(redis-cli -h IP_ADDRESS -p 6380 -a admin info 2>/dev/null | grep config_file | cut -d: -f2 | tr -d '\r\n')更稳妥的方式:先把路径存到变量中
先将路径赋值给变量,确认路径正确后再执行cat,这样更容易排查问题:# 先获取并清理路径,存入变量 REDIS_CONF=$(redis-cli -h IP_ADDRESS -p 6380 -a admin info 2>/dev/null | grep config_file | cut -d: -f2 | tr -d '\r\n') # 打印变量确认路径 echo "当前Redis配置文件路径:$REDIS_CONF" # 执行cat命令 cat "$REDIS_CONF"
备注:内容来源于stack exchange,提问作者redliquid
相关产品推荐
相关产品推荐

