Что означает амперсанд в конце строки сценария оболочки?

sh sys-snap.sh & 

Что такое sh ? Что такое sys-snap.sh ? Почему я должен положить & в конце линии? Может ли кто-нибудь объяснить синтаксис?

Без & сценарий не вернется к подсказке, пока я не нажму Ctrl + C. С помощью & я могу нажать enter, и он работает.

sh – стандартная Bourne-совместимая оболочка (обычно bash или тире)

sys-snap.sh – это сценарий оболочки, содержащий команды, которые выполняются командой sh . Поскольку вы не публикуете его контент, я могу только догадываться из его имени, что он делает. Я могу найти скрипт, связанный с CPanel с тем же именем файла, который делает файл журнала со всеми текущими процессами, текущим использованием памяти, статусом базы данных и т. Д. Если скрипт начинается с строки shebang ( #!/bin/sh или аналогичного) , вы можете сделать его исполняемым с помощью chmod +x sys-snap.sh и запустить его напрямую, используя ./sys-snap.sh если он находится в текущем каталоге.

С & процесс начинается в фоновом режиме, поэтому вы можете продолжать использовать оболочку и не дожидаться завершения сценария. Если вы забудете это, вы можете остановить текущий текущий процесс с помощью Ctrl-Z и продолжить его в фоновом режиме с помощью bg (или на переднем плане с помощью fg ). Дополнительные сведения см. В разделе Управление заданиями

Это называется job control в unix. Команда & информирует оболочку о том, чтобы поставить команду в фоновом режиме. Это означает, что он продолжает запускать команду sys-snap.sh но возвращает вас в свою оболочку, чтобы вы могли продолжать выполнять параллельные команды.

Вы можете увидеть список заданий, выполняемых в настоящее время с помощью команды jobs . Вы можете вернуться к команде (вывести на передний план) с помощью команды fg . Который вытаскивает команду обратно в состояние, в котором вы не видите приглашения, и вам нужно выпустить Ctrl- C, чтобы убить процесс. Однако вы можете приостановить (приостановить) этот процесс, выпустив Ctrl- Z . Это приостановит sys-snap.sh и вернет вас в ваше приглашение. Затем вы можете использовать его (как если бы вы его выдали с помощью команды & ) с помощью команды bg , и она возобновит выполнение из приостановленного состояния, на которое он нажал Ctrl- Z .

Обратите внимание, что вы можете иметь более одного задания за раз (как показано в jobs ):

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

Вы можете выполнять фоновое и фоновое изображение, используя свой номер задания, %1 будет sys-snap.sh а %2 будет another-script.sh . Если вы используете fg или bg без аргументов, он будет выполнять команду в задании, отмеченном + в выведенном выше задании.

fg %1

вернет sys-snap.sh на передний план, оставив another-script.sh в фоновом режиме.

Вы можете выпустить последовательность Ctrl- C для выполнения заданий, не выполняя перед ними команду kill , kill %1 отправит эквивалент Ctrl- C в sys-snap.sh .

Если вы используете оболочку bash, команда man bash содержит подробный раздел под заголовком «JOB CONTROL», который будет рассмотрен более подробно.

Что касается имени sys-snap.sh , то под именами unix имена произвольны (с несколькими исключениями, такими как файлы динамического загрузчика). Для них нет необходимости иметь конкретные расширения файлов, чтобы заставить их запускаться как сценарий оболочки, вызывать другие команды, такие как perl или php и т. Д. Он обычно используется для обеспечения ясности, что в этом случае это .sh сценарий оболочки используя Bourne Shell /bin/sh .

Функциональная часть sys-snap.sh (когда вы смотрите на содержимое с чем-то вроде команды less ) – это Shebang . На первой строке вы, вероятно, найдете один из:

 #! /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 & 

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 будет сценарием какой-либо оболочки, поэтому sh sys-snap.sh выполнит сценарий оболочки.

& заставит процесс оболочки работать в фоновом режиме. Без этого он останется на переднем плане, пока скрипт не закончится. Сценарий будет работать в любом случае, это просто вопрос ожидания завершения сценария или нет, прежде чем выполнять дополнительные команды.

Ваш сервер в hostgator?

Сценарий sys-snap.sh – это специальный скрипт, написанный командой sys-snap.sh для сбора всех файлов журнала и данных для системы, поэтому они используют свой вывод для мониторинга и сбора системной информации.