Проигнорируйте HostKeyChecking. Для этого я использую, например:
ssh -oStrictHostKeyChecking=no -oUserKnownHostsFile=/dev/null user@example.net
Добавьте цифровой отпечаток хоста/сервера к .ssh/known_hosts
до Вашего первого подключения. Это - более безопасный путь.
Не использовать expr
для арифметики. Это долго было устаревшим: оболочкам теперь встроили арифметику, с $((…))
создайте (POSIX), или с let
встроенный (ksh/bash/zsh) или ((…))
создайте (ksh/bash/zsh).
let
и ((…))
возвратитесь 1 (код состояния отказа), если последнее оцененное выражение 0. Избегать этого порождения Вашего сценария выйти под set -e
, примите меры, чтобы последнее выражение не возвратилось 0, например:
let "a = 2 - 2" 1
((a = 2 - 2, 1))
С другой стороны, используйте || true
идиома:
((a = 2 - 2)) || true
С другой стороны, сделайте свою арифметику внутри $((…))
и Ваши присвоения снаружи. Присвоение возвращает состояние последней замены команды в значении, или 0, если нет никакой замены команды, таким образом, Вы в безопасности. Это обладает дополнительным преимуществом работы в любой оболочке POSIX (такой как тире).
a=$((2 - 2))
У меня была та же проблема. tl; доктор:
Если последний АРГУМЕНТ [позволенных] оценивает к 0, позвольте возвратам 1; позвольте возвратам 0 иначе.
Использовать $(( $C - $D ))
вместо этого для Вашей арифметики. Это более эффективно также.