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