2014-11-06 2 views
1

Это, похоже, не является общей проблемой, но я не могу получить возможности ZSH для работы в скрипте ZSH, например. autocd:Параметры не работают внутри zsh-скрипта

#!/usr/bin/env zsh 

setopt autocd 
my_directory 

Я просто «команда my_directory не существует», что то, что происходит, когда эта опция не установлена. Тот факт, что я не получаю много результатов поиска для настройки параметров внутри скриптов (и этот вопрос кажется уникальным), говорит о том, что я не хватает какой-то важной части информации, которую я еще не видел.

Спасибо!

ответ

0

Глядя на исходный код (от последней версии git, РУКОВОДИТЕЛЬ = 36b8f83 7 ноября 2014 года), в Src/exec.c, я вижу это по линии 2854:

char trycd = (isset(AUTOCD) && isset(SHINSTDIN) && 
        (!redir || empty(redir)) && args && !empty(args) && 
        !nextnode(firstnode(args)) && *(char *)peekfirst(args)); 

Исходя из этого, появляется (хотя и не задокументировано, что я могу найти), что опция SHINSTDIN также должна быть установлена ​​для работы AUTOCD. Однако вы не можете просто включить эту опцию в скрипте (например, добавив -s к shebang), потому что тогда оболочка, запускающая ваш скрипт, не будет читать команды из сценария.

Я не знаю, предотвращает ли отказ AUTOCD от работы без SHINSTDIN, или если есть недокументированная причина, почему это должно быть правдой; это будет хорошим вопросом для списка рассылки zsh-workers.

Смежные вопросы