近期遇到一个比较少见的命令command,详细如下:
command 是一些shell的内建命令
我本机使用的是dash,服务器使用的是bash,其他shell没有测试
- dash
user@PC:~/debug/bin/test$ ll /bin/sh
lrwxrwxrwx 1 root root 4 12月 8 2015 /bin/sh -> dash*
user@PC:~/debug/bin/test$ type command
command 是 shell 内建
- bash
xl@Exdroid42:~/work/tina$ ll /bin/sh
lrwxrwxrwx 1 root root 9 4月 20 16:15 /bin/sh -> /bin/bash*
xl@Exdroid42:~/work/tina$ type command
command 是 shell 内建
command命令的作用
无视shell脚本中的“同名”函数,执行特定的命令
- dash
下面摘自man dash
command [-p] [-v] [-V] command [arg ...]
Execute the specified command but ignore shell functions when searching for it.
(This is useful when you have a shell function with the same name as a builtin com‐
mand.)
-p search for command using a PATH that guarantees to find all the standard util‐
ities.
-V Do not execute the command but search for the command and print the resolution
of the command search. This is the same as the type builtin.
-v Do not execute the command but search for the command and print the absolute
pathname of utilities, the name for builtins or the expansion of aliases.
- bash
下面摘自man bash
command [-pVv] command [arg ...]
Run command with args suppressing the normal shell function lookup. Only builtin
commands or commands found in the PATH are executed. If the -p option is given,
the search for command is performed using a default value for PATH that is guaran‐
teed to find all of the standard utilities. If either the -V or -v option is sup‐
plied, a description of command is printed. The -v option causes a single word
indicating the command or filename used to invoke command to be displayed; the -V
option produces a more verbose description. If the -V or -v option is supplied,
the exit status is 0 if command was found, and 1 if not. If neither option is sup‐
plied and an error occurred or command cannot be found, the exit status is 127.
Otherwise, the exit status of the command builtin is the exit status of command.
测试
在test.sh中构建ls函数,测试command命令的作用
user@PC:~/debug/bin/test$ ls
test.sh
user@PC:~/debug/bin/test$ cat test.sh
function ls()
{
echo "haha"
}
echo "--1--"
ls
echo "--2--"
command ls
echo "--3--"
echo command ls
echo "--4--"
$(echo command ls)
user@PC:~/debug/bin/test$ ./test.sh
--1--
haha
--2--
test.sh
--3--
command ls
--4--
test.sh