【问题标题】:Alias executed recursively on OSX在 OSX 上递归执行的别名
【发布时间】:2017-05-31 13:53:22
【问题描述】:

我正在使用 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)

【问题讨论】:

    标签: macos zsh oh-my-zsh zshrc zsh-alias


    【解决方案1】:

    这与它在 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 将返回/usr/local/bin/composer(或类似路径),但后续使用将返回composer: aliased to ...。这会导致输入文件composer:(注意冒号)找不到的错误信息。

    在大多数情况下,只定义一次别名可能会起作用,但为了安全起见,您可以使用参数-p 显式告诉which 查找路径(忽略内置函数、别名和函数):

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

    【讨论】:

    • 干得好;给非 zsh 用户的说明:在 zsh 中,which 是一个 builtin,它还报告了 aliases 的定义。
    【解决方案2】:

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

    【讨论】:

    • 如果不首先解释您是如何使用screen 的,这个答案是没有用的,而且这样的解释可能对其他人没有用处。我只想删除问题。
    猜你喜欢
    • 2013-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多