Если, например, у вас есть команда, которая возвращает ненулевой статус выхода как часть раскрытия PROMPT_COMMAND
( который выполняется перед выводом приглашения в bash
), тогда это вызовет немедленный выход оболочки, если вы установите параметр errexit
с помощью set -e
.
Другая возможность состоит в том, что существует набор прерываний DEBUG
, который возвращает ненулевой статус выхода.Однако ловушка DEBUG
выполняется до вызова команды, поэтому при нажатии оболочка не будет немедленно завершаться, когда вы нажмете Введите после установки - e
, но вместо этого перед запуском следующей команды.
С помощью set -u
вы устанавливаете опцию оболочки nounset
. Эта опция приведет к тому, что оболочка выдаст ошибку, если вы попытаетесь развернуть любую неустановленную переменную отдельно от $ @
и $ *
. Это не приведет к завершению работы оболочки, если также не действует set -e
.
Если установить -u
в действии и неустановленную переменную в PS1
, оболочка выйдет , как только вы установите Параметр errexit
с установлен -e
.
Вы также можете установить
unison-all
и автоматически выбрать нужную версию, как описано в
Обнаружил решение :
Тестирование Debian имеет 2.48, что должно быть совместимо с версией Ubuntu. Вам нужно добавить тестовое репо на свой Pi, но с более низким приоритетом (поэтому репо будет использоваться только при явном запросе).
Добавьте следующие строки в / etc / apt / preferences
(создайте файл, если он еще не существует):
Package: *
Pin: release o=Raspbian,a=stable
Pin-Priority: 500
Package: *
Pin: release o=Raspbian,a=testing
Pin-Priority: 300
Затем добавьте следующую строку в / etc / apt / sources .list
:
deb http://mirrordirector.raspbian.org/raspbian/ testing main contrib non-free rpi
Теперь запустите:
sudo apt-get update
sudo apt-cache policy
Убедитесь, что репозиторий testing (тот, который был только что добавлен) имеет более низкий приоритет, чем другие.
Наконец:
sudo apt-get install -t testing unison-all
Это дало мне 2,48 на Pi, и я смог подключиться и синхронизировать.
Вы также можете установить явную версию Unison вместе с существующими. Запустите
sudo apt-cache search unison
, чтобы узнать, какие версии предлагаются, а затем установите одну (и) по вашему выбору, например: [
sudo apt-get install -t testing unison2.40.102
] Пакеты с номером версии являются актуальными. unison
- это метапакет, который всегда зависит от последней версии, а unison-all
- это метапакет, который зависит от выбора версий.
Если на вашем сервере несколько версий, вам может потребоваться запустить Unison с параметром -addversionno
: в результате клиент отправляет на сервер номер своей версии и приказывает серверу запустить та же версия, а не версия по умолчанию.
Вы также можете попробовать то же самое на своем рабочем столе Ubuntu. Вам нужно будет:
/etc/apt/sources.list
. (Скопируйте строку для текущего выпуска и измените название выпуска - это прилагательное, например, xenial
для Xenial Xerus.) etc / apt / preferences
соответственно. Вместо стабильного
и тестирования
используйте название текущего выпуска и выпуск с желаемой версией Unison. Ваш текущий выпуск имеет более высокий приоритет 500
. sudo apt-get update; sudo apt-cache policy
и проверьте вывод, чтобы убедиться, что приоритеты установлены правильно. Иначе вы можете испортить установку Ubuntu! unison
(или unison-all
или явную версию), выбрав новое репо. Или возьмите файл .deb
и установите его напрямую.
Та же проблема для меня, чтобы синхронизировать компьютер Unix (Debian Jessie) с версией 2.40.102 Unison (установленной из официальных выпусков стабильных пакетов apt-get) и компьютер macOS с последней версией 2.48.15.
Лучшим решением было понизить версию Unison для macOS до 2.40. Двоичный файл находится здесь:
Union 2.40.61 (GUI) для macOS Intel
И не забудьте установить командную строку из меню «Unison» > «Установить инструмент командной строки».
При синхронизации предупреждение:
Unison[16276:318574] Calling nonGuiStartup
Fatal error: Received unexpected header from the server:
expected "Unison 2.40\n" but received "Unison 2.48\n\000\000\000\000\017",
which differs at "Unison 2.48".
заменяется на:
Unison[18574:332371] Calling nonGuiStartup
Connected [//SERVER.IP//Users/USer/Desktop/Unison -> //localhost//home/user/test]
Looking for changes Warning: No archive files were found for these roots…
NB: У меня macOS Sierra 10.12.4 и Unison 2.40.61, кажется, работает хорошо.