псевдонимы zsh не расширяются даже с опцией `complete_aliases` - PullRequest
0 голосов
/ 24 февраля 2019

Как раскрыть псевдоним, определенный при использовании zsh -c?

% zsh -c 'setopt aliases complete_aliases; alias d=date; d'
zsh:1: command not found: d

1 Ответ

0 голосов
/ 24 февраля 2019

Используйте eval для принудительного zsh для анализа псевдонима после код был прочитан в:

zsh -c 'setopt aliases complete_aliases; alias d=date; eval d'

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

Как правило, следует правильно указать все аргументы eval.


man zshmisc говорит:

   There is a commonly encountered problem with aliases illustrated by the
   following code:

        alias echobar='echo bar'; echobar

   This prints a message that the command echobar could not be found.
   This happens because aliases are expanded when the code is read in; the
   entire line is read in one go, so that when echobar is executed it is
   too late to expand the newly defined alias.  This is often a problem in
   shell scripts, functions, and code executed with `source' or `.'.
   Consequently, use of functions rather than aliases is recommended in
   non-interactive code.
...