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


22

该文件中别名为lscommand的~/.bashrc别名:

alias ls='ls --color=auto'

然后,当我ls在别名lsls --color=auto)终端中运行命令时运行。但我的问题是我如何可以运行原ls,并仅ls单独使用,而不额外的参数并没有与删除别名进入解决问题?因为当我删除该条目时,我可以简单地运行它ls

Answers:


60

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

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

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

  3. 内置命令: command ls

  4. 双引号: "ls"

  5. 单引号: 'ls'

  6. 反斜杠字符: \ls


9
bash中的其他精度:command something绕过两个别名 AND 函数,名为something\\something'something'并且"something"仅绕过命名的别名something(如果存在函数,则将调用它)。(如果别名同时存在且没有被旁路,则别名优先于函数)
Olivier Dulac

9

暂停别名扩展

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

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

要启用它们:

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

请注意,别名扩展默认情况下在脚本中是禁用的,但默认情况下是在交互式外壳程序中设置的。


9

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

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

6

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

command ls

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

which ls

它将返回“ / bin / ls”,因此带有

`哪一个`

您可以直接执行它。


4

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.