Звездочка: Отбрасывание вызовов с “ast_yyerror”

Я думаю, если бы я должен был перепроектировать свой AD снова существует несколько вещей, которые я сделал бы по-другому, но я нашел что:

Пользователи - тезисы Разделения в отделы, но также и с area/s для временного файла или штата агентства. Местоположение для них не будет так же важно как несомненно люди переместятся.

Компьютеры - Разделение они в местоположение и sub местоположения. Т.е. OfficeComputers/LondonOffice/Room103 (Финансы). Это означает, что можно применить настройки к одному местоположению или офису - например, другой прокси-сервер или различные параметры антивирусной защиты (конечно, только если программа управления AV использует AD) - без реорганизации, и надо надеяться не должен будет открывать кучу проблем, которая является петлевой обработкой.

Я также нашел полезным не использовать созданный в пользователях или группах компьютеров, не любых технических вопросах, но именно так что можно легко видеть, где вещи не должны быть.

Наконец, разделите свои серверы также, я пошел для местоположения/роли, которое, кажется, работало вполне хорошо.

7
задан 5 April 2010 в 00:10
3 ответа

В звездочке $[] выражение, неопределенные переменные не возвращают неявную пустую строку или нуль. Они не расширяются как "ничто" до оценки выражения, поэтому после того, как переменная расширена (ни к чему), это не видимо к синтаксическому анализатору выражения. Это вызывает ошибку, уже отмеченную Pablo Alsina:

GotoIf("IAX2/AtlantaTeliax-10086", "?CLOSED,1")

Существует два способа избежать этого:

  1. Всегда давайте Вашим переменным разумные значения по умолчанию перед использованием их (в качестве предложенного Pablo).
  2. В любом $[] выражение, включите свои переменные и литералы с двойными кавычками. Это заставит неопределенную переменную быть обработанной как пустая строка, которая может все еще использоваться в целях сравнения.

Лично, я пытаюсь сделать обоих. Например:

exten => START,n,Set(FORCE_CLOSED=FALSE)
exten => START,n,GotoIf($["${FORCE_CLOSED}"="TRUE"]?CLOSED,1)

Отметьте двойные кавычки вокруг ${FORCE_CLOSED} и сравнительное значение. Даже если переменная будет неопределенной, то выражение будет иметь "" (пустая строка) для сравнения с "TRUE".

Действительно, можно использовать любой символ, который Вы любите, потому что он будет просто прикреплен на переменное расширение. Это просто дает Вам литеральное значение, которое, как гарантируют, будет там в случае, если переменная является неопределенной. Мне нравятся кавычки, потому что это заставляет код напомнить другие языки программирования. Вы могли столь же легко использовать что-то как $[x${FORCE_CLOSED}=xTRUE], который обычно замечается в сценариях Оболочки Bourne. Конечным результатом является то же.

2
ответ дан 2 December 2019 в 23:51
  • 1
    Есть ли способ определить переменную только если it' s неопределенный? Как если (! определенный (FORCE_CLOSED) {FORCE_CLOSED=FALSE}? –  Nick 16 April 2010 в 00:50
  • 2
    Не то, чтобы I' m знающий, по крайней мере, не с 1,4 (я haven' t перемещенный в 1,6 все же). Лучшие, о которых я знаю, - EXISTS() и ISNULL() функции. Оба берут " data" как их аргумент, не имя переменной, таким образом, они - not' t действительно тестирующий переменную так как, до чего расширяется переменная. Они, кажется, противоположности друг друга, с EXISTS() возврат 1 если " data" что-либо вообще, и ISNULL() возврат 1 если " data" ничто. –  James Sneeringer 16 April 2010 в 18:49

Вот то, что я могу сказать Вам.

yyerror является ошибкой из синтаксического анализатора, сгенерированного yacc.

Ошибка жалуется на =. Таким образом, кажется, что, на той строке, = конструкция, которую не поддерживает грамматика.

Удача на serverfault.com, куда этот вопрос направляется...

0
ответ дан 2 December 2019 в 23:51
  • 1
    That' s, на что это походит, но проблема полностью неустойчива. Для некоторых вызовов, there' s никакая ошибка вообще и это работает просто великолепно. Если это была действительно синтаксическая ошибка, wouldn' t проблема происходят для КАЖДОГО вызова, которые поражают ту строку плана набора, и не просто некоторые из них? –  Nick 5 April 2010 в 02:04

Кто определяет $ {FORCE_CLOSED}?

Из того, что я вижу, кажется, что та переменная иногда не получает начальное значение, и затем повышения синтаксического анализатора и ошибку, когда Вы оцениваете

GotoIf("IAX2/AtlantaTeliax-10086", "?CLOSED,1")

Проверьте, что вызовы, который повышает ошибку, имеют рыночную стоимость для FORCE_CLOSED

0
ответ дан 2 December 2019 в 23:51
  • 1
    Переменная определяется, когда пользователь набирает определенное расширение, которое устанавливает ее. Например, в Сочельник, сотрудник набрал бы 221 перед отъездом, который устанавливает значение к истинному. на 26-м, кто бы ни возвращается в офис, затем набрал бы 220 для установки его на " false" снова. –  Nick 16 April 2010 в 00:49

Теги

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