2017-01-25 9 views
1

Я только что опубликовал новый zsh tab completion script for Gradle, но получил головоломку проблемы. Надеюсь, это простая ошибка с моей стороны.ошибка синтаксического анализа около `]] 'для кажущегося действительного условия zsh

Репортер ошибок говорит, что при попытке вызвать завершение на zsh 5.0.5 на SUSE, он получает «_gradle: 14: parse error near»]] '', но этот код отлично работает для меня на zsh 5.0.8 на macOS и Ubuntu Yakkety.

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

_gradle_caching_policy() { 
    [[ ! $(find $1 -mmin -$cache_ttl_mins 2>/dev/null) ]]                                             
} 

Вот full issue и другую ссылку на completion script. Руководство будет высоко оценено.

ответ

2

Это, как представляется, (относительно) недавно исправлена ​​ошибка, так как она может быть воспроизведена в zsh 5.0.5 с чем-то же просто, как

foo() { [[ bar ]] } 

, который, тем не менее, работа в zsh 5.2.


Update: перечитывая вопрос и, видя, что кажется, должно быть зафиксировано в 5.0.8, а, я бы просто сказать репортеру, что ему нужно обновить до версии zsh, где фиксируется эта ошибка синтаксического анализа. Ошибка не в вашем скрипте.

+0

Большое спасибо за ответ. Я попросил автора обновить. –

0

Это должно быть связано с непредвиденными значениями $1 или $cache_ttl_mins.

Вы можете обойти вызов find и осуществить проверку аналог в другой policy_checks

_gradle_caching_policy() { 
    local -a oldp 
    oldp=("$1"(Nmm+${cache_ttl_mins})) 
    (($#oldp)) 
} 

Смотрите, если это вызывает ошибку, слишком - он должен вести себя так же.

+0

'$ 1' и' $ cache_ttl_mins' не разворачиваются во время возникновения ошибки синтаксического анализа. – chepner

+0

Я не могу воспроизвести ошибку, вы уверены, что ошибка разбора не происходит в подоболочке после расширения переменных? –