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

αғs*_*нιη 29 command-line bash alias

一个别名ls命令~/.bashrc这一个别名文件:

alias ls='ls --color=auto'
Run Code Online (Sandbox Code Playgroud)

然后,当我ls在终端别名ls( ls --color=auto) 中运行命令时。但我的问题是如何在没有额外参数的情况下lsls单独运行 original并且不解决删除别名条目的问题?因为当我删除这个条目时,我可以在 simple 中运行它ls

ter*_*don 68

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

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

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

  3. 内置命令: command ls

  4. 双引号: "ls"

  5. 单引号: 'ls'

  6. 反斜杠字符: \ls

  • bash 中的额外精度:`command something` 绕过了 **alias** 和 **function** 命名为 `something`。`\\something`、`'something'` 和`"something"` 只绕过名为`something` 的**别名**(如果一个函数存在,它将被调用)。(如果两者都存在且没有被绕过,则别名在函数之前) (11认同)

Vol*_*gel 10

暂停别名扩展

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

$ shopt -u expand_aliases
$ command -v ls
/bin/ls
Run Code Online (Sandbox Code Playgroud)

要启用它们:

shopt -s expand_aliases
$ command -v ls
alias ls='ls --color=auto'
Run Code Online (Sandbox Code Playgroud)

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


g_p*_*g_p 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-
    
    Run Code Online (Sandbox Code Playgroud)

    (还有很多...)

  • 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 /]$ 
    
    Run Code Online (Sandbox Code Playgroud)


P.-*_*Lin 6

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

command ls
Run Code Online (Sandbox Code Playgroud)

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

which ls
Run Code Online (Sandbox Code Playgroud)

它将返回/bin/ls,因此

`which ls`
Run Code Online (Sandbox Code Playgroud)

或者

$(which ls)
Run Code Online (Sandbox Code Playgroud)

你可以直接执行那个文件。


Har*_*ris 5

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