колотите выходы-e при разрешении или expr оценивает к 0

Проигнорируйте хост

Проигнорируйте HostKeyChecking. Для этого я использую, например:

ssh -oStrictHostKeyChecking=no -oUserKnownHostsFile=/dev/null user@example.net

Добавьте хост

Добавьте цифровой отпечаток хоста/сервера к .ssh/known_hosts до Вашего первого подключения. Это - более безопасный путь.

20
31.01.2013, 02:54
4 ответа

Не использовать 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))
16
27.01.2020, 19:44

У меня была та же проблема. tl; доктор:

Если последний АРГУМЕНТ [позволенных] оценивает к 0, позвольте возвратам 1; позвольте возвратам 0 иначе.

2
27.01.2020, 19:44

Использовать $(( $C - $D )) вместо этого для Вашей арифметики. Это более эффективно также.

1
27.01.2020, 19:44
  • 1
    Что делает это более эффективным, чем говорят (( A = $C - $D ))? –  bishop 26.01.2017, 18:11

Этот синтаксис работает для меня:

a=$((b + c))
1
27.01.2020, 19:44

Теги

Похожие вопросы