Gui*_*ern 18 command-line bash manpage
fg
,bg
以及jobs
用于作业管理。出于某种原因(也许只有我一个人),我无法找到他们的二进制文件和联机帮助页(不whereis
打印任何信息)。which
没有输出。不过,这些命令本身工作得很好。
我运行了类似的命令find /bin bg
,但没有成功。我也跑去find / bg
广撒网。
hee*_*ayl 36
您不会针对这些命令获取任何文件,因为它们是 shell ( bash
) 内置程序,而不是单独的可执行文件(例如二进制文件、脚本)。实际上,shell 内置函数被编译成 shell 可执行文件;如果你愿意,你可以检查源代码以确保它。由于which
或whereis
仅查找外部可执行文件,您不会获得内置程序的任何输出。
要查找命令是内置文件还是别名或函数还是外部文件,最好的方法是使用type
内置文件:
$ type fg
fg is a shell builtin
$ type bg
bg is a shell builtin
$ type jobs
jobs is a shell builtin
Run Code Online (Sandbox Code Playgroud)
另请注意,您的find
命令在语法上不正确。正确(最简单)的语法是find /where/to/search -name 'name_to_search'
.
另请注意,很少有命令同时实现为 shell 内置和单独的独立可执行文件。对于此类命令,请始终记住内置命令将优先于外部命令。所以,当你运行时echo something
,内置的echo
就会运行。如果要运行二进制可执行文件echo
,则需要以不同的方式调用它。一种方法是使用可执行文件的完整路径:/bin/echo something
.
要显示命令的所有可用版本,请type
使用以下-a
选项运行:
$ type -a echo
echo is a shell builtin
echo is /bin/echo
Run Code Online (Sandbox Code Playgroud)
要获取 shell 内置程序的文档,您可以检查man
页面bash
或使用help
命令(这是一个内置命令):
help jobs
Run Code Online (Sandbox Code Playgroud)
同样正如@terdon 指出的那样,您应该使用type
而不是which
.
它们是 shell 内置程序 - 您可以通过键入help fg
或help jobs
在 bash shell 提示符下获取基本使用信息,或者从 bash 联机帮助页获取更多详细信息。
除了 heemayl 的回答之外,值得指出的是fg
,bg
, 和jobs
必须内置到外壳中,因为它们操作外壳内存中的数据结构和/或与外壳进程相关的内核状态。不可能编写一个外部命令来完成fg
它的工作。
其他必须内置的命令包括cd
,
eval
,
exec
,
exit
,
export
,
history
,
read
,
set
,
source
(aka .
),
shift
,
trap
,
ulimit
,
umask
, 和wait
。您的 shell 可能有更长的列表,这取决于它实现了多少扩展功能。 POSIX 有一个不同但重叠的“特殊内置实用程序”列表——我不确定为什么像break
和continue
算作命令而不是控制结构关键字,或者为什么 POSIX不考虑像umask
must-build这样的东西-in 当它们不能以任何其他方式实现时。(您可以编写一个/bin/umask
名为umask(2)
,但它只会更改自己的设置,而不是由 shell 创建的后续进程,因此它不会满足其规范。)