shell小技巧(一百三十二)同名的命令的执行

在现实中,一个Linux系统内,有可能存在两个名称相同的命令。

这可能是后辈重写了一个功能相同的命令,也可能是功能不同,但是名称巧合了。

在这种情况下,操作者要准确执行你想要的命令就需要特别注意技巧。

有人说,我用全路径来执行就好啦,或者用cd进入到那个命令所在的目录再执行。

这种说法在某些情况下确实有效,有时候无效。

比如:

一个命令跟系统中的内建命令或者是别名相同,那么该怎么办?

这里做一个实验。在/usr/local/bin/下创建一个脚本,名字为“ll”。

大家很熟悉这个名字吧,在CentOS系统中是ls命令带参数执行的别名。

脚本内容如下:

#!/bin/bash

echo "this is /usr/local/bin/ll."

给这个脚本赋予执行权限。

chmod +x /usr/local/bin/ll

然后执行命令:

cd /usr/local/bin/

ll

此时执行结果为ls命令执行后输出的目录下列表。

显然没执行脚本。

我们现在再执行如下命令:

command ll

此时结果是终端输出了“this is /usr/local/bin/ll.”

这里显然是command起到了作用。

command的作用是禁用别名和函数。

bash执行命令的优先级:

1.别名

2.关键字

3.函数

4.内置命令

5.脚本或可执行程序

根据这个优先顺序,如果存在一个命令或脚本名字跟内建命令名字一致,command是无效的。

再试验一下,创建一个cd脚本并给执行权限。

cd是一个内建命令,用来进入指定的目录。

如下图:

 从上图得到结论,虽然使用了command命令但是cd脚本没有执行。执行的是cd命令。

如果要禁止cd这个内建命令,可以使用enable来实现,如下图:

 如图可知,cd命令没有执行。如果需要恢复使用enable命令如下:

enable cd

另外还有一个builtin命令,它的作用是只调用内建命令。

如果先使用enable禁用,在使用builtin窒息功能被禁用的内建命令,结果是啥?有兴趣的朋友自己试试。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

乐大师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值