当前位置: 首页>>技术教程>>正文


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

, ,

问题描述

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

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

最佳办法

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

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

help jobs

另外,正如 @terdon 指出的那样,您应该使用 type 而不是 which

次佳办法

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

第三种办法

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

必须内置的其他命令包括 cd 、\n eval 、\n exec 、\n exit 、\n export 、\n history 、\n read 、\n set 、\n source (又名 . ),\n shift 、\n trap 、\n ulimit 、\n umask 、\n 和 wait 。您的 shell 可能有更长的列表,具体取决于它实现的扩展功能的数量。 POSIX has a different, but overlapping, list of “special 内置 utilities” – 我不确定为什么像 breakcontinue 这样的东西算作命令而不是 control-structure 关键字,或者为什么 POSIX 不考虑像 umaskmust-build-in 这样的东西,因为它们不能以任何其他方式实现。 (您可以编写一个名为 /bin/umask 的程序来调用 umask(2) ,但它只会更改其自身的设置,而不会更改 shell 创建的后续进程,因此它无法满足其规范。)

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/14459.html,未经允许,请勿转载。