【问题标题】:Create shell alias with semi-colon character使用分号字符创建 shell 别名
【发布时间】:2016-09-16 01:24:38
【问题描述】:

我注意到我倾向于将ls 错误输入为;s,所以我决定我应该创建一个别名,这样它就不会抛出错误,而是运行我的意思的命令。

但是,知道分号字符在 shell 脚本/命令中是有意义的,有什么方法可以让我用分号键创建一个别名?我尝试了以下方法无济于事:

alias ;s=ls
alias ";s"=ls
alias \;=ls

是否可以在 shell 别名中使用分号作为字符?以及如何在 ZSH 中这样做?

【问题讨论】:

    标签: macos zsh zsh-alias


    【解决方案1】:
    • 首先:考虑以不同的方式解决您的问题 - 以这种方式对抗 shell 语法是自找麻烦。

    • 据我所知,虽然您可以定义这样的命令 - 尽管不是使用 别名 - 调用 它被引用,例如作为\;s - 这违背了目的;请继续阅读以了解技术细节。

      • 别名不起作用:而zsh 允许您定义它(可以说,它应该't),调用它所需的机制——引用——也是绕过别名并因此防止调用。

      • 但是,您可以在$PATH定义一个函数(仅限zsh)或脚本(在zsh 以及bashkshdash 中工作),只要您调用它引用(例如,@987654329 @ 或 ';s'";s"),这违背了目的

    为了记录,这里是命令定义,但同样,它们只能被调用引用

    函数(仅在zsh 中工作;放置在初始化文件中,例如~/.zshrc):

     ';s'() { ls "$@" }
    

    可执行脚本;s(适用于dashbashkshzsh;放在$PATH 的目录中):

     #!/bin/sh
     ls "$@"
    

    【讨论】:

    • 所以总而言之,我不能将原始 ;s 别名为 ls 以解决我的错误输入问题?
    • 你不能定义一个别名,但是你可以定义一个函数(甚至是你$PATH中的一个可执行脚本)。
    • 但是我不能在不引用/转义分号字符的情况下调用该函数?
    • @DamonSwayn:是的 - 我非常专注于寻找 技术 解决方案,以至于我没有意识到必须引用调用完全违背了目的 - 我已经更新相应的答案。又回到了与 shell 语法的斗争;我认为不值得这样做。
    猜你喜欢
    • 1970-01-01
    • 2017-12-30
    • 1970-01-01
    • 2015-10-13
    • 2013-08-01
    • 2015-01-07
    • 1970-01-01
    • 1970-01-01
    • 2017-02-01
    相关资源
    最近更新 更多