shell 脚本行末尾的 & 符号是什么意思?

shell 脚本行末尾的 & 符号是什么意思?
sh sys-snap.sh &

什么是sh?什么是sys-snap.sh?为什么我应该放在&行尾?谁能解释一下语法吗?

如果没有,&脚本将不会返回到提示符,直到我按Ctrl+ C。我可以按 Enter 键并且&它可以工作。

答案1

sh是默认值Bourne 兼容外壳(通常是 bash 或 dash)

sys-snap.sh是一个 shell 脚本,其中包含要sh执行的命令。由于您没有发布其内容,我只能从其名称猜测其功能。我可以找到一个与 CPanel 相关的具有相同文件名的脚本,该脚本会创建一个日志文件,其中包含所有当前进程、当前内存使用情况、数据库状态等。如果脚本以舍邦线(或类似),如果它在当前目录中,#!/bin/sh您可以使其可执行chmod +x sys-snap.sh并直接使用启动它。./sys-snap.sh

由于&该进程在后台启动,因此您可以继续使用 shell,而不必等到脚本完成。如果您忘记了,您可以使用 停止当前正在运行的进程,Ctrl-Z并在后台使用 bg(或在前台使用fg)继续它。有关更多信息,请参阅作业控制

答案2

这就是所谓的job controlunix下的。通知&shell 将命令置于后台。这意味着它会继续运行该sys-snap.sh命令,但会返回到 shell,以便您继续执行并行命令。

您可以使用该命令查看当前正在运行的作业列表jobs。您可以使用该命令返回到该命令(进入“前台”)fg。这会将命令拉回到您看不到提示的状态,并且您必须发出Ctrl-C的过程。不过你可以暂停(停顿)该过程发出Ctrl- Z。这将暂停sys-snap.sh并返回到提示符。然后您可以将其设置为后台(就好像您已发布它一样))&bg命令,它会恢复从暂停状态运行Ctrl-Z已将其放入。

请注意,您一次可以拥有多个工作(如图所示jobs):

[1]-  Running          sys-snap.sh &
[2]+  Running          another-script.sh &

您可以使用他们的工号、%1will besys-snap.sh%2will be将他们置于后台和前台another-script.sh。如果您使用fg或不使用参数,它将对上面输出中bg标记的作业执行该命令。+jobs

fg %1

将放sys-snap.sh回到前台,同时留another-script.sh在后台。

您可以向正在运行的作业发出Ctrl-C序列,而无需使用该kill命令将其置于前台,kill %1将发送相当于Ctrl- Cto 的命令sys-snap.sh

如果您使用的是 bash shell,则该man bash命令在标题为“作业控制”的部分下有一个详细部分,将提供更多详细信息。

至于 的名称sys-snap.sh,在 unix 下文件名是任意的(有一些例外,例如动态加载文件)。它们不需要具有特定的文件扩展名来使它们作为 shell 脚本运行、调用其他命令,例如perlphp等。它通常用于提供清晰度,在本例中,它是.sh使用 Bourne Shell 的 Shell 脚本/bin/sh

sys-snap.sh(当你用命令之类的东西查看它的内容时)的功能部分less舍邦。在第一行,您可能会发现以下之一:

#! /bin/sh
#! /bin/bash
#! /usr/local/bin/bash

或类似的。用基本术语来说,运行 后的命令#!(例如/bin/sh),并将脚本文件的其余部分的内容一次一行地提供给它。请注意,该文件还必须设置为可执行,chmod以便您可以将其作为命令运行。如果未设置权限,则shebang不会产生任何效果,因为您会收到错误消息:

bash: sys-snap.sh: command not found

./sys-snap.sh或者如果您通过显式路径(.即当前工作目录)运行它,您将得到:

bash: ./sys-snap.sh: Permission denied

另一种选择是让它没有执行权限并明确要求 /bin/sh 运行它:

/bin/sh sys-snap.sh &

答案3

sh是一个外壳。具体使用哪个 shell 取决于系统。使用bash作为标准 shell 的系统示例:

$ ls -l /bin/sh
lrwxrwxrwx 1 root root 4 Mar 13 16:12 /bin/sh -> bash

$ sh --version
GNU bash, version 4.2.45(1)-release (x86_64-pc-linux-gnu)

sys-snap.sh将是某种 shell 脚本,因此sh sys-snap.sh将执行该 shell 脚本。

&将导致 shell 进程在后台运行。如果没有,&它将停留在前台直到脚本结束。无论哪种方式,脚本都会工作,只是在执行进一步的命令之前等待脚本结束或不结束的问题。

答案4

你的服务器在hostgator吗?

该脚本sys-snap.sh是hostgator团队编写的一个特殊脚本,用于收集系统的所有日志文件和数据,因此他们使用其输出来监视和收集系统信息。

相关内容