fg
,bg
并jobs
用于作业管理。出于某种原因(也许只是我的原因),我无法找到它们的二进制文件在哪里,也无法找到它们的手册页(whereis
不打印任何信息)。which
没有输出。但是命令本身工作正常。
我运行了类似 的命令find /bin bg
,但没有命中。我还运行了find / bg
广撒网。
答案1
您没有针对这些命令获取任何文件,因为它们是 shell ( bash
) 内置程序,而不是单独的可执行文件(例如二进制文件、脚本)。实际上,shell 内置程序被编译到 shell 可执行文件中;如果您愿意,可以检查源代码以确保这一点。由于which
orwhereis
仅查找外部可执行文件,因此您没有获得内置程序的任何输出。
要查找命令是内置命令、别名、函数还是外部文件,最好的方法是使用type
内置命令:
$ type fg
fg is a shell builtin
$ type bg
bg is a shell builtin
$ type jobs
jobs is a shell builtin
另请注意,您的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
要获取 shell 内置命令的文档,您可以查看页面man
或bash
使用该help
命令(这是一个内置命令):
help jobs
正如@terdon 指出的那样你应该type
使用which
。
答案2
它们是 shell 内置命令 - 您可以通过在 bash shell 提示符下键入help fg
或来获取基本使用信息help jobs
,或者从 bash 手册页获取更详细的信息。
答案3
除了 heemayl 的回答外,值得指出的是fg
,,bg
和jobs
不得不内置于 shell 中,因为它们可以操作 shell 内存中的数据结构和/或与 shell 进程相关的内核状态。不可能编写一个外部命令来执行这些操作fg
。
其他必须内置的命令包括cd
、
eval
、
exec
、
exit
、
export
、
history
、
read
、 (又名)、 、 、 、 和。您的 shell 可能有更长的列表,具体取决于它实现的扩展功能set
的 数量。 source
.
shift
trap
ulimit
umask
wait
POSIX 有一个不同但有重叠的“特殊内置实用程序”列表-- 我不确定为什么像break
和这样的东西continue
算作命令而不是控制结构关键字,或者为什么 POSIX没有umask
当无法通过其他方式实现时,请考虑必须内置之类的事情。(您可以编写一个/bin/umask
名为的程序,umask(2)
,但它只会改变自身的设置,而不会改变 shell 创建的后续进程的设置,因此它无法满足其规范。)
答案4
fg
,bg
并且jobs
不是单独的实用程序,但它们是bash
(shell 内置命令)的一部分。
您可以使用命令在 bash 手册中找到有关它们的更多信息
man bash