【问题标题】:Bash - aliasing unaliasBash - 别名 unalias
【发布时间】:2015-02-18 17:26:31
【问题描述】:

我知道在 bash 中使用 alias 命令可以在 bash 中定义自定义函数,甚至可以覆盖内置函数(例如 alias sudo="help" 有效)。 Unalias -a 可以收拾用 alias 命令造成的乱七八糟,但是 unalias 也可以加别名(我已经运行了 alias unalias="unalias"命令成功,所以我想它也适用于其他命令 - 我不想弄乱操作系统,因为它是一台公共计算机)。
我的问题是,如果我将 unalias 别名为其他东西,然后别名,如果它们本身不可用,我可以重置命令吗?如果我也给 sudo 起了别名会怎样?
例如如果我想成为一个巨魔并在我朋友的机器上运行这个命令

    alias sudo="clear" && alias unalias="clear" && alias alias="clear"

所有这些命令都将无法使用,所以我敢肯定恢复 sudo 的功能会很困难。是否可以不重新安装操作系统?
(我可以考虑使用 ctrl+alt+f1 切换到终端,但我不知道别名的东西是否也有别名。如果我在那里做同样的事情呢?)

【问题讨论】:

    标签: linux bash shell alias


    【解决方案1】:

    用反斜杠作为命令前缀的常用技术,即\,以确保避免使用任何别名并从系统默认路径运行它:

    例子:

    $> alias ps=date
    $> ps
    Wed Feb 18 12:33:17 EST 2015
    $> \ps
     PID TTY           TIME CMD
     615 ttys000    0:00.66 -bash
     621 ttys001    0:07.36 -bash
     913 ttys002    0:01.19 -bash
    

    您可以使用运行\ps 运行系统默认/bin/ps 而运行ps 运行别名命令date

    【讨论】:

    • 这是一个记录在案的功能还是碰巧起作用的技巧?
    • 我已经使用了很多年,但我相信会有一些关于它的文档。我将尝试为此查找一些文档。
    • "\" 只是告诉 shell 以下字符 (l) 应按原样处理,因此 shell 不会对其应用别名。
    【解决方案2】:

    扩展anubhava's answer:也可以使用单引号或双引号:

    $ alias ps=date
    $ ps
    Wed Feb 18 12:33:17 EST 2015
    $ "ps"
     PID TTY           TIME CMD
     615 ttys000    0:00.66 -bash
     621 ttys001    0:07.36 -bash
     913 ttys002    0:01.19 -bash
    

    通常,任何计算结果为 ps 的表达式都将被取消别名。

    【讨论】:

      【解决方案3】:

      如果您想执行二进制文件而不是同名别名,只需输入二进制文件的完整路径:

      /usr/bin/sudo <cmd>
      

      如果别名仅在交互式 shell 中可用,而在 shell 脚本中不可用,也不会破坏其他任何东西。


      要“删除”别名,只需从您的 .bashrc 中删除它们并启动一个新的 shell。

      【讨论】:

      • @EtanReisner 是的,anubhava 已经回答了这个问题,我对此表示赞赏。也谢谢你。知道了这一点,就没有必要再输入整个路径了。但是将保留此答案作为替代...
      • 完整的路径不适用于 shell 内置插件,所以是的,如果你给它们起别名,替代方案很有用。
      猜你喜欢
      • 2018-03-07
      • 1970-01-01
      • 1970-01-01
      • 2010-10-05
      • 2018-03-19
      • 2015-07-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-05
      相关资源
      最近更新 更多