别名在 OSX 上递归执行

Alias executed recursively on OSX

我正在使用 oh-my-zsh,在 .zshrc 中有以下别名:

alias composer="php -d memory_limit=-1 $(which composer)"

我得到以下输出:

$ composer
Could not open input file: composer:

还有:

$ which composer
composer: aliased to php -d memory_limit=-1 composer: aliased to php -d memory_limit=-1 composer: aliased to php -d memory_limit=-1 /usr/local/bin/composer
$ zsh --version
zsh 5.2 (x86_64-apple-darwin15.4.0)

在 Linux 下它按预期工作:

$ which composer
composer: aliased to php -d memory_limit=-1 /usr/bin/composer
$ zsh --version
zsh 5.3.1 (x86_64-unknown-linux-gnu)

这是 GNU screen 会话的问题。创建一个新的 screen window 别名按预期工作。

这与它在 OS X 或 Linux 上或屏幕的使用无关。它看起来很像你 运行 命令

alias composer="php -d memory_limit=-1 $(which composer)"

多次。这导致 composer:

的递归定义
composer: aliased to php -d memory_limit=-1 composer: aliased to php -d memory_limit=-1 composer: aliased to php -d memory_limit=-1 /usr/local/bin/composer

添加换行符使其显而易见:

composer: aliased to php -d memory_limit=-1 \
composer: aliased to php -d memory_limit=-1 \
composer: aliased to php -d memory_limit=-1 \
/usr/local/bin/composer

虽然第一次使用 which composer 将 return /usr/local/bin/composer(或类似路径),但后续使用将 return composer: aliased to ...。这导致错误消息,即无法找到输入文件 composer:(注意冒号)。

只定义一次别名可能在大多数情况下都有效,但为了安全起见,您可以明确告诉 which 使用参数 [=20= 查找路径(忽略内置函数、别名和函数) ]:

alias composer="php -d memory_limit=-1 $(which -p composer)"