Mohammad Kholghi Asked: 2019-07-02 09:52:53 +0800 CST2019-07-02 09:52:53 +0800 CST 2019-07-02 09:52:53 +0800 CST 读取命令在哪里? 772 我想找到read命令,所以我做了: $ which read 它返回退出状态 1。为什么会发生这种情况? command-line 2 个回答 Voted Best Answer Eliah Kagan 2019-07-02T10:01:50+08:002019-07-02T10:01:50+08:00 read是内置的shell,而不是外部命令。which只告诉你外部命令。假设您使用的是 Bash(或其他一些 Bourne 风格的 shell),您通常应该使用typeorcommand -v而不是which. ek@Cord:~$ type read read is a shell builtin type它们本身就是 shell 内置命令,command它们不仅知道外部命令,还知道关键字、内置命令、别名和函数。which是一个不知道这些事情的外部命令;它只知道外部命令。当您询问可以在 shell 中使用的命令时,有时which不会出现任何内容。有时它确实会为命令提供一些东西,但它与您在 shell 中使用命令时实际运行的东西不同。 ek@Cord:~$ type type command which type is a shell builtin command is a shell builtin which is /usr/bin/which 在 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 有关您通常不应该使用which的原因以及在包括 Bash 在内的各种 shell 中改用什么的更多信息,请参阅为什么不使用“which”?那该用什么? U. Windl 2019-07-03T04:58:48+08:002019-07-03T04:58:48+08:00 如果您对 UNIX 和 shell 的工作原理有所了解,从语法 ( ) 中应该可以明显read var1 var2 ...看出,任何外部程序都不能设置本地 shell 变量,因此read 必须将其构建到 shell 中。 在 bash 中,您不仅会收到退出代码 1,还会收到类似which: no read in (/home/user/bin:/usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/games). 这应该会敲响警钟,如果read仍然找到,它必须内置到 shell 中。
read
是内置的shell,而不是外部命令。which
只告诉你外部命令。假设您使用的是 Bash(或其他一些 Bourne 风格的 shell),您通常应该使用type
orcommand -v
而不是which
.type
它们本身就是 shell 内置命令,command
它们不仅知道外部命令,还知道关键字、内置命令、别名和函数。which
是一个不知道这些事情的外部命令;它只知道外部命令。当您询问可以在 shell 中使用的命令时,有时which
不会出现任何内容。有时它确实会为命令提供一些东西,但它与您在 shell 中使用命令时实际运行的东西不同。在 Bash 中,您可以按照尝试的顺序查看命令的所有当前可能含义,其中
type -a
:有关您通常不应该使用
which
的原因以及在包括 Bash 在内的各种 shell 中改用什么的更多信息,请参阅为什么不使用“which”?那该用什么?如果您对 UNIX 和 shell 的工作原理有所了解,从语法 ( ) 中应该可以明显
read var1 var2 ...
看出,任何外部程序都不能设置本地 shell 变量,因此read
必须将其构建到 shell 中。在 bash 中,您不仅会收到退出代码 1,还会收到类似
which: no read in (/home/user/bin:/usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/games)
. 这应该会敲响警钟,如果read
仍然找到,它必须内置到 shell 中。