![shell 脚本行末尾的 & 符号是什么意思?](https://linux22.com/image/49472/shell%20%E8%84%9A%E6%9C%AC%E8%A1%8C%E6%9C%AB%E5%B0%BE%E7%9A%84%20%26%20%E7%AC%A6%E5%8F%B7%E6%98%AF%E4%BB%80%E4%B9%88%E6%84%8F%E6%80%9D%EF%BC%9F.png)
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 control
unix下的。通知&
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 &
您可以使用他们的工号、%1
will besys-snap.sh
和%2
will 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 脚本运行、调用其他命令,例如perl
或php
等。它通常用于提供清晰度,在本例中,它是.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团队编写的一个特殊脚本,用于收集系统的所有日志文件和数据,因此他们使用其输出来监视和收集系统信息。