sh sys-snap.sh &
什么sh
啊 什么sys-snap.sh
啊 为什么我要放在&
行尾?谁能解释语法?
没有&
脚本,直到按Ctrl+ 之前脚本都不会返回到提示C。随着&
我按下Enter键,它的工作原理。
sh sys-snap.sh &
什么sh
啊 什么sys-snap.sh
啊 为什么我要放在&
行尾?谁能解释语法?
没有&
脚本,直到按Ctrl+ 之前脚本都不会返回到提示C。随着&
我按下Enter键,它的工作原理。
Answers:
sh
是默认的Bourne兼容外壳(通常为bash或破折号)
sys-snap.sh
是一个shell脚本,其中包含sh
执行的命令。由于您不发布其内容,因此只能从其名称猜测其作用。我可以找到与CPanel相关的具有相同文件名的脚本,该脚本将创建一个包含所有当前进程,当前内存使用情况,数据库状态等的日志文件。如果该脚本以shebang行(#!/bin/sh
或类似名称)开头,则可以使其可执行与chmod +x sys-snap.sh
直接使用启动它./sys-snap.sh
,如果它是在当前目录。
由于&
进程是在后台启动的,因此您可以继续使用外壳程序,而不必等到脚本完成。如果您忘记了它,可以使用停止当前正在运行的进程,Ctrl-Z
并使用bg
(在或在前台fg
)在后台继续 进行。有关更多信息,请参见作业控制。
sh
在通常只bash
或dash
在基于Linux的系统(或最近的OS / X)。在BSD上,它通常是Ash的另一种变体(破折号基于NetBSD sh,其本身基于Almquist Shell)或pdksh派生。在商业Unices上,通常为ksh88。
&
并因此在后台启动,则只会得到一个新的shell提示。
&&
与单“&”号有区别&
吗?
这被称为job control
unix下。该&
通知壳把命令在后台运行。这意味着它将继续运行该sys-snap.sh
命令,但是将您返回到外壳程序,以允许您继续执行并行命令。
您可以看到当前正在使用该jobs
命令运行的作业列表。您可以使用该命令返回命令(转到'foreground)fg
。其拉命令回到你看到没有任何提示的状态,你必须发出Ctrl- C对杀的过程。但是,您可以通过发出- 暂停(暂停)该过程。这将暂停并返回您的提示。然后,您可以后台它(仿佛你已发出它具有的)与命令,将简历从它运行已暂停状态- 已经把它英寸CtrlZsys-snap.sh
&
bg
CtrlZ
请注意,您一次只能完成一项工作(如所示jobs
):
[1]- Running sys-snap.sh &
[2]+ Running another-script.sh &
您可以使用他们的工作编号(%1
将为sys-snap.sh
和%2
将为)为背景设置和前景设置another-script.sh
。如果您使用fg
或bg
不带参数它将对标工作的行动命令+
在jobs
上面的输出。
fg %1
将放回sys-snap.sh
前景,同时保留another-script.sh
在背景中。
您可以向正在运行的作业发出Ctrl- C序列,而不必使用kill
命令kill %1
将它们前台化,它将发送等价的Ctrl- C到sys-snap.sh
。
如果您使用的是bash shell,则该man bash
命令的“作业控制”部分下有一个详细部分,以进行更详细的说明。
至于的名称sys-snap.sh
,unix下的文件名是任意的(有一些例外,例如动态加载器文件)。不需要它们具有特定的文件扩展名以使它们作为Shell脚本运行,调用其他命令(例如perl
或php
等)。通常用于提供清晰度,在这种情况下,它是.sh
使用Bourne Shell的Shell脚本。/bin/sh
。
Shebang是功能部分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 &
nohup
功能,因为它通常与&
启动进程结合使用,并且能够杀死启动它的外壳而不会终止该进程。
jobs
如果它是第一个命令,它将总是返回空?
&
仅在命令末尾使用会分离stdin
(但不会分离stdout
或stderr
),这意味着如果您的命令/脚本在后台运行但正在写入stdout
,您可能会遇到Ctrl + c
无法停止输出但可以键入命令。这是因为后台进程正在写入,stdout
但由于它不在前台运行而无法停止。更多信息在这里。
sh
是一个壳。哪个外壳完全取决于系统。bash
用作标准外壳的系统示例:
$ 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进程在后台运行。如果没有&
它,它将一直停留在前台,直到脚本结束。该脚本将以任何一种方式工作,这只是在执行其他命令之前等待脚本结束还是没有结束的问题。
您的服务器在hostgator中吗?
该脚本sys-snap.sh
是由hostgator团队编写的特殊脚本,用于收集系统的所有日志文件和数据,因此他们将其输出用于监视和收集系统信息。
&&
与单“&”号有区别&
吗?