我想找到read命令,所以我做了:
$ which read
Run Code Online (Sandbox Code Playgroud)
它返回退出状态 1。为什么会发生这种情况?
Eli*_*gan 18
read是 shell 内置命令,而不是外部命令。which只告诉您有关外部命令的信息。假设您正在使用 Bash(或其他一些 Bourne 风格的 shell),您通常应该使用type或command -v代替which.
ek@Cord:~$ type read
read is a shell builtin
Run Code Online (Sandbox Code Playgroud)
type并且command它们本身是 shell 内置函数,它们不仅了解外部命令,还了解关键字、内置函数、别名和函数。which是一个不知道这些事情的外部命令;它只知道外部命令。which当您询问可以在 shell 中使用的命令时,有时不会出现任何问题。有时它确实会为命令显示某些内容,但是当您在 shell 中使用该命令时,它实际运行的内容并不相同。
ek@Cord:~$ type type command which
type is a shell builtin
command is a shell builtin
which is /usr/bin/which
Run Code Online (Sandbox Code Playgroud)
在 Bash 中,您可以按照尝试的顺序查看命令的所有当前可能含义,使用type -a:
ek@Cord:~$ type -a read
read is a shell builtin
ek@Cord:~$ type -a echo
echo is a shell builtin
echo is /bin/echo
Run Code Online (Sandbox Code Playgroud)
有关为什么通常不应该使用which以及在包括 Bash 在内的各种 shell 中使用什么的更多信息,请参阅为什么不使用“which”?那用什么?