我怎样才能运行具有同名别名的原始命令?

我怎样才能运行具有同名别名的原始命令?

ls我的文件中该命令有一个别名,~/.bashrc其别名如下:

alias ls='ls --color=auto'

当我ls在终端中运行命令时,别名ls( ls --color=auto) 运行。

我的问题是:如何才能ls仅运行原始版本(而不是别名版本),而不使用任何额外参数,也不删除别名条目?

答案1

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

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

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

  3. 内置命令:command ls

  4. 双引号:"ls"

  5. 单引号:'ls'

  6. 反斜杠字符:\ls

答案2

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

因此,要运行原始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 /]$ 
    

答案3

暂停别名扩展

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

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

要启用它们:

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

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

答案4

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

相关内容