Не могу проверить результат из SSH - PullRequest
1 голос
/ 27 февраля 2020

Я проверяю совпадения файла через S SH с системой 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=0 или NUM=1, он будет правильно обработан.

1 Ответ

2 голосов
/ 27 февраля 2020

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. Удалите if из результата, пропустив через tr -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 info;

  1. Что такое ^M
  2. Удалить ^ M из переменной
...