【问题标题】:Zsh over-substituting aliasesZsh 过度替换别名
【发布时间】:2017-12-20 20:18:56
【问题描述】:

在 Bash 中,运行 tmux ls 可以正常工作。但是,在 Zsh 中,我收到此错误:

tmux: 未知选项 -- p
用法:list-sessions [-F 格式]

我怀疑这是因为 Zsh 将命令的 ls 替换为我的自定义别名 ls

alias -g ls='ls -p --color'

我尝试设置alias -g tmux\ ls='tmux list-sessions',但没有成功。

有什么办法可以改变 Zsh 的别名扩展/替换行为?

【问题讨论】:

    标签: alias zsh tmux


    【解决方案1】:

    您将ls 定义为全局别名,这意味着它在任何地方 shell 看到ls,而不仅仅是当它用作命令时。只需删除-g 选项:

    alias ls='ls -p --color'
    

    【讨论】:

    • 我使用的是-g,所以它可以用作root。我应该在 root 的 .zshrc 文件中定义这个别名吗?
    • 不确定-g 是如何使其“可以用作root”的,除非您的意思是sudo ls。但是这种行为——替换子命令中的内容——正是你现在所说的你不想要的。
    • @CharlesDuffy 是的,我希望sudo ls 使用别名,但我不希望lstmux ls 那样在任何地方 被替换。但是,这解决了我的问题,我可以在使用 sudo 时手动输入别名。
    【解决方案2】:

    在 zsh 中,当您使用 alias -g 时,您有全局别名。全局别名是一个别名,它不仅适用于命令的开头,而且适用于任何地方。 这里不是你想要的!

    但是全局别名可能非常强大和有用。例如:

    alias -g L="| less" # to page the output with less
    alias -g WL="| wc -l"  # to have stats from wc
    alias -g CP="| xclip -f -r" # to copy output into clipboard
    alias -g NU="&> /dev/null" # to remove error and standard outputs
    

    使用它们:

    ps aux L  # expanded into: ps aux | less
    ls -1 WL # expanded into: ls -1 | wc -l
    date CP # expanded into: date | xclip -f -r
    ls /foo2 /usr NU || echo okay # expanded into: ls /foo2 /usr &> /dev/null || ...
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-10-21
      • 1970-01-01
      • 2011-06-11
      • 2011-01-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-28
      相关资源
      最近更新 更多