type
type命令被用于判断另外一个命令是否是内置命令,但是它实际上有更多的用法。
1.判断一个名字当前是否是alias、keyword、function、builtin、file或者什么都不是
[root@c66 ~]# type ls
ls 是 `ls --color=auto' 的别名
[root@c66 ~]# type -a ls
ls 是 `ls --color=auto' 的别名
ls 是 /usr/bin/ls
[root@c66 ~]# type if
if 是 shell 关键字
[root@c66 ~]# type cd
cd 是 shell 内嵌
[root@c66 ~]# type cdd
-bash: type: cdd: 未找到
2. -t判断一个名字当前是否是alias、keyword、function、builtin、file或者什么都不是的另一种方法(适用于脚本编程)
[root@c66 ~]# type -t wget
file
[root@c66 ~]# type -t if
keyword
[root@c66 ~]# type -t kill
builtin
[root@c66 ~]# type -t sed
file
3. -a显示一个名字的所有可能,
[root@c66 ~]# type -a ls
ls 是 `ls --color=auto' 的别名
ls 是 /usr/bin/ls
[root@c66 ~]# type -a wget
wget 是 /usr/bin/wget
[root@c66 ~]# type -a cd
cd 是 shell 内嵌
cd 是 /usr/bin/cd
4. -p 小p,查看一个命令的执行路径(如果它是外部命令的话)
[root@c66 ~]# type -p ls #内置命令,没有输出
[root@c66 ~]# type -p wget #外部命令,有输出
/usr/bin/wget
5. -P 大p, 列出当前的readline函数名称和绑定。搜索命令物理路径
[root@c66 ~]# type -P ls #内置命令
/usr/bin/ls
[root@c66 ~]# type -P wget #外置命令
/usr/bin/wget
command
command命令在shell脚本里面,如果发现有个函数和我们需要执行的命令同名,我们可以用command用来强制执行命令,而不是同名函数,然后我们也可以在shell脚本里面判断某个命令是否存在,我们平时一般用which命令也行。
#!/bin/bash
function pwd()
{
echo "I am pwd function"
}
echo "shell run pwd"
pwd
echo "shell command pwd"
command pwd
if command -v pwd > /dev/null; then
echo "pwd command has found"
else
echo "pwd command has not found"
fi
if command -v pwd1 > /dev/null; then
echo "pwd1 command has found"
else
echo "pwd1 command has not found"
fi
执行结果:
[root@c66 ~]# bash test.sh
shell run pwd
I am pwd function
shell command pwd
/root
pwd command has found
pwd1 command has not found
hash
linux系统下会有一个hash表,当你刚开机时这个hash表为空,每当你执行过一条命令时,hash表会记录下这条命令的路径,就相当于缓存一样。第一次执行命令shell解释器默认的会从PATH路径下寻找该命令的路径,当你第二次使用该命令时,shell解释器首先会查看hash表,没有该命令才会去PATH路径下寻找。
hash表的作用:
大大提高命令的调用速率。
参数
-l 显示hash表内容
-r 清除hash表
-d openssl 删除表中某一条(删除openssl)
-t openssl 查看openssl命令路径(hash表中没有的话,可以调用which命令)
-p /usr/bin/openssl aliesopenssl 往hash表中添加一条,执行aliesopenssl即执行openssl命令(起别名)
hash判断环境中是否存在某命令
check_program_installed() {
hash $1 > /dev/null 2>&1
if [ "$?" != "0" ]; then
print "command $1 not found. is it installed?."
exit 1
fi
}
参考资料:
https://blog.csdn.net/heybeaman/article/details/89499537
https://www.cnblogs.com/jxhd1/p/6699177.html
https://www.cnblogs.com/pangkr-linux/p/10489582.html
网友评论