首页 > 解决方案 > 无法验证 SSH 的结果

问题描述

我正在通过 SSH 验证文件与主机 ubunty 系统的匹配,并且 if 语句未正确处理结果。

export FILENAME=test.txt
export NUM=$(ssh -t ubuntu@192.168.XXX.XXX "ls ~/Documents/ | grep '$FILENAME' | wc -l")
echo "Received value: $NUM"
if [ $NUM == 0 ]; then
    echo "If processed as: 0"
else
    echo "If processed as: 1"
fi

所以如果$FILENAME存在,我得到以下输出

Connection to 192.168.XXX.XXX closed.
Received value: 1
If processed as: 1

如果没有,我得到以下一个

Connection to 192.168.XXX.XXX closed.
Received value: 0
If processed as: 1

为什么会发生这种情况?我得到了错误的格式值吗?如果我在 if 语句之前强制NUM=0NUM=1它得到正确处理。

标签: bashif-statementssh

解决方案


if [ $NUM == 0 ]; then应该按预期工作。(有关 SO 的更多信息


用于cat -v显示输出中的所有不可见字符;

NUM=$(ssh -t ubuntu@192.168.XXX.XXX "ls ~/Documents/ | grep '$FILENAME' | wc -l")
echo "NUM: ${NUM}" | cat -v

#Prints; NUM: 0^M

不可见的^M字符弄乱了if声明。通过管道从结果中删除 iftr -d '\r'


export FILENAME=test.txt
export NUM=$(ssh -t ubuntu@192.168.XXX.XXX "ls ~/Documents/ | grep '$FILENAME' | wc -l" | tr -d '\r')
echo "Received value: $NUM"
if [ $NUM == 0 ]; then
    echo "If processed as: 0"
else
    echo "If processed as: 1"
fi

更多^M信息;

  1. 什么是^M
  2. 从变量中删除 ^M

推荐阅读