命令`fg`,`bg`和`jobs`在哪里安装?

fgbgjobs用于工作管理。 由于某种原因(也许只是我),我无法找到他们的二进制文件的位置和他们的联机帮助页( whereis没有打印信息)。 没有输出。 但是命令本身工作得很好。

我运行了像find /bin bg这样的命令,但没有命中。 我还运行了find / bg来建立一个宽网。

您没有获得任何针对这些命令的文件,因为它们是shell( bash )内置函数,而不是单独的可执行文件(例如二进制文件,脚本)。 实际上,shell内置函数被编译成shell可执行文件; 如果你想,你可以检查源代码,以确保它。 由于whichwhich只查找外部可执行文件,因此您无法获得内置输入的任何输出。

要查找命令是内置函数,别名函数还是函数或外部文件,最好的方法是使用内置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

要显示命令的所有可用版本,请使用-a选项运行type

 $ type -a echo echo is a shell builtin echo is /bin/echo 

要获取shell内置函数的文档,可以查看bashman页或使用help命令(这是一个内置命令):

 help jobs 

另外,正如@terdon所指出的, 你应该使用type而不是which

它们是shell内置函数 – 您可以通过在bash shell提示符下键入help fghelp jobs来获取基本用法信息,或者从bash联机帮助页中获取更多详细信息。

除了heemayl的答案之外,值得指出的是fgbgjobs 必须构建到shell中,因为它们操纵shell内存中的数据结构和/或与shell进程相关的内核状态。 编写一个执行fg操作的外部命令是不可能的。

必须内置的其他命令包括cdevalexecexitexporthistoryreadsetsource (aka . ), shifttrapulimitumaskwait 。 您的shell可能有一个更长的列表,具体取决于它实现的扩展function。 POSIX有一个不同但重叠的“特殊内置实用程序”列表 – 我不确定为什么像breakcontinue这样的东西算作命令而不是控制结构关键字,或者为什么POSIX 考虑像umask这样的东西当它们无法以任何其他方式实施时必须内置。 (您可以编写一个名为/bin/umask的程序,调用umask(2) ,但它只会更改自身的设置,而不会更改shell创建的后续进程,因此它不会满足其规范。)

这是shell内置命令。 它们没有二进制文件,因为它们是Bash(或者您使用的任何shell)的一部分。

例如,在Bash手册页中记录了它们(参见“SHELL BUILTIN COMMANDS”部分)

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

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

 man bash