问题描述
~/.bashrc
文件中 ls
命令的别名,别名为:
alias ls='ls --color=auto'
然后,当我在终端中运行 ls
命令时,别名为 ls
( ls --color=auto
)运行。但我的问题是我如何才能只运行原始 ls
并且只运行 ls
而无需额外的参数并且不解决删除别名条目的问题?因为当我删除此条目时,我可以在简单的 ls
中运行它。
最佳思路
您可以通过以下方法绕过别名:
-
命令的完整路径名:
/bin/ls
-
命令替换:
$(which ls)
-
内置命令:
command ls
-
双引号:
"ls"
-
单引号:
'ls'
-
反斜杠字符:
\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
运行命令