为什么 shell 会丢弃我的变量字符串

为什么 shell 会丢弃我的变量字符串
[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

有人能帮助我吗?

答案1

redis-cli输出带有 Windows/DOS 行尾的所有内容(即行尾为\r\n而不是\n)。因此,第二行实际上会尝试输出以下文件:

/opt/redis/7.0.5/cluster/redis-6380.conf\r

不存在。此外,打印错误消息时,末尾的回车符会将光标推到行首,而打印错误消息的其余部分将从头开始继续。因此

cat: /opt/redis/7.0.5/cluster/redis-6380.conf\r: No such file or directory

变成

: No such file or directoryer/redis-6380.conf

您需要\r从输出中删除字符,如下所示:

cat $(redis-cli  -h IP_ADDRESS -p 6380 -a admin info 2>/dev/null|grep config_file|cut -d: -f2|tr -d $'\r')

附注:当错误消息以冒号开头时,总是某处隐藏着一个回车符。

相关内容