Моя ставка - то, что где-нибудь существует a sh
сценарий с двойным знаком "равно" (" == ") в a test
команда вместо единственной (" = "). Встроенный Bash test
позволяет ==
или =
, но Оболочка Bourne (по крайней мере, dash
на Ubuntu), только позволяет =
. Кроме того, мой /usr/bin/test
только позволяет равный сингл. Но посмотрите нижнюю часть этого ответа для других примеров, которые производят эту ту же ошибку.
Я заглянул бы logrotate.conf
и посмотрите, имеет ли это строку 91, который мог бы иметь ту проблему.
Если по некоторым причинам Вы хотите воссоздать сообщение об ошибке для тестирования:
Создайте файл, давайте назовем его "a" со следующим содержанием:
echo 'In script "a"'
f="/etc/hosts.deny"
test $f == "foo"
Теперь сделайте:
sh a
Необходимо добраться:
In script "a"
test: 3: /etc/hosts.deny: unexpected operator
Можно также воспроизвести подобную ошибку с помощью любого следующего:
sh -c "test /etc/hosts.deny +"
sh -c "test /etc/hosts.deny -"
sh -c "test /etc/hosts.deny /"
sh -c "test /etc/hosts.deny *"
Править: Попробуйте следующее для сужения поиска:
$ su -
$ find /etc -type f | xargs awk 'FNR==91 && /test/ {print FILENAME, $0}'
Вы будете su
для укоренения затем работайте find
/awk
команда. Это покажет Вам имена файлов и строку 91 из файла, если слово "тест" появится на той строке для каждого файла под /etc
. Затем можно искать операторы, которые являются неправильными.
man rsync
имеет целый раздел по, ВКЛЮЧАЮТ/ИСКЛЮЧАЮТ ШАБЛОНЫ. Короче говоря, для первого случая Вы могли бы сначала хотеть снять с якоря соответствие и удостовериться, что это - каталог, как так:
mail/cur/
Никакие подстановочные знаки здесь, это только проигнорирует названный каталог cur
в другом названном каталоге mail
.