当前位置: 首页>>技术教程>>正文


如何运行具有相同名称别名的原始命令?

, ,

问题描述

~/.bashrc 文件中 ls 命令的别名,别名为:

alias ls='ls --color=auto'

然后,当我在终端中运行 ls 命令时,别名为 ls ( ls --color=auto )运行。但我的问题是我如何才能只运行原始 ls 并且只运行 ls 而无需额外的参数并且不解决删除别名条目的问题?因为当我删除此条目时,我可以在简单的 ls 中运行它。

最佳思路

您可以通过以下方法绕过别名:

  1. 命令的完整路径名:/bin/ls

  2. 命令替换:$(which ls)

  3. 内置命令:command ls

  4. 双引号:"ls"

  5. 单引号:'ls'

  6. 反斜杠字符:\ls

次佳思路

暂停别名扩展

您还可以暂时禁用所有别名的别名扩展,而不删除它们:

$ shopt -u expand_aliases
$ command -v ls
/bin/ls

要启用它们:

shopt -s expand_aliases
$ command -v ls
alias ls='ls --color=auto'

请注意,在脚本中默认禁用别名扩展,但在交互式 shell 中默认设置。

第三种思路

您可以在命令前使用 \ 禁用别名。

因此,要运行原始 ls 命令,您需要使用 \ls 运行它

例如

  • 首先创建 ls 命令的别名。

    [guru@guru-Aspire-5738 /]$ alias ls='ls -l'
    [guru@guru-Aspire-5738 /]$ ls
    total 96
    drwxr-xr-x   2 root root  4096 Sep  3 18:31 bin
    drwxr-xr-x   5 root root  4096 Sep 17 02:51 boot
    drwxr-xr-x   2 root root  4096 Sep  3 22:17 cdrom
    drwxr-xr-x  17 root root  4520 Sep 17 21:11 dev
    drwxr-xr-x 153 root root 12288 Sep 17 21:11 etc
    drwxr-xr-x   3 root root  4096 Sep  3 22:17 home
    lrwxrwxrwx   1 root root    37 Sep  8 21:31 initrd.img -> /boot/initrd.img-3.2.0-68-generic-pae
    lrwxrwxrwx   1 root root    36 Sep  3 22:18 initrd.img.old -> boot/initrd.img-3.2.0-
    

    (还有很多…)

  • 使用覆盖别名的 \ 输出原始 ls

    [guru@guru-Aspire-5738 /]$ \ls
    bin    etc         lib     opt   sbin     tmp      vmlinuz.old
    boot   home        lost+found  proc  selinux  usr
    cdrom  initrd.img      media       root  srv      var
    dev    initrd.img.old  mnt     run   sys      vmlinuz
    [guru@guru-Aspire-5738 /]$ 
    

第四种思路

您可以在别名命令之前添加 command,例如

command ls

或者通过结合 which 运行原始可执行文件

which ls

它将返回 /bin/ls ,因此与

`which ls`

或者

$(which ls)

您可以直接执行该文件。

第五种思路

您还可以从其原始位置 /bin/ls 而不是 ls 运行命令

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/12716.html,未经允许,请勿转载。