How do I expand an alias defined when using zsh -c
?
% zsh -c 'setopt aliases complete_aliases; alias d=date; d'
zsh:1: command not found: d
Use eval
to force the zsh
to parse the alias after the code has been read in:
zsh -c 'setopt aliases complete_aliases; alias d=date; eval d'
In this case, d
will never expand, so doesn't need to be quoted.
In general you should properly quote all arguments to eval
.
man zshmisc
says:
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.