命令“fg”、“bg”和“jobs”安装在哪里?

命令“fg”、“bg”和“jobs”安装在哪里?

fgbgjobs用于作业管理。出于某种原因(也许只是我的原因),我无法找到它们的二进制文件在哪里,也无法找到它们的手册页(whereis不打印任何信息)。which没有输出。但是命令本身工作正常。

我运行了类似 的命令find /bin bg,但没有命中。我还运行了find / bg广撒网。

答案1

您没有针对这些命令获取任何文件,因为它们是 shell ( bash) 内置程序,而不是单独的可执行文件(例如二进制文件、脚本)。实际上,shell 内置程序被编译到 shell 可执行文件中;如果您愿意,可以检查源代码以确保这一点。由于whichorwhereis仅查找外部可执行文件,因此您没有获得内置程序的任何输出。

要查找命令是内置命令、别名、函数还是外部文件,最好的方法是使用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 内置命令的文档,您可以查看页面manbash使用该help命令(这是一个内置命令):

help jobs

正如@terdon 指出的那样你应该type使用which

答案2

它们是 shell 内置命令 - 您可以通过在 bash shell 提示符下键入help fg或来获取基本使用信息help jobs,或者从 bash 手册页获取更详细的信息。

答案3

除了 heemayl 的回答外,值得指出的是fg,,bgjobs 不得不内置于 shell 中,因为它们可以操作 shell 内存中的数据结构和/或与 shell 进程相关的内核状态。不可能编写一个外部命令来执行这些操作fg

其他必须内置的命令包括cdevalexecexitexporthistoryread、 (又名)、 、 、 、 和。您的 shell 可能有更长的列表,具体取决于它实现的扩展功能set的 数量。 source.shifttrapulimitumaskwaitPOSIX 有一个不同但有重叠的“特殊内置实用程序”列表-- 我不确定为什么像break和这样的东西continue算作命令而不是控制结构关键字,或者为什么 POSIX没有umask当无法通过其他方式实现时,请考虑必须内置之类的事情。(您可以编写一个/bin/umask名为的程序,umask(2),但它只会改变自身的设置,而不会改变 shell 创建的后续进程的设置,因此它无法满足其规范。)

答案4

fgbg并且jobs不是单独的实用程序,但它们是bash(shell 内置命令)的一部分。

您可以使用命令在 bash 手册中找到有关它们的更多信息

man bash

相关内容