it-swarm.com.de

Was bedeutet kaufmännisches Und am Ende einer Shell-Skriptzeile?

sh sys-snap.sh &

Was ist sh? Was ist sys-snap.sh? Warum sollte ich & Am Ende der Zeile setzen? Kann jemand die Syntax erklären?

Ohne & Geht das Skript erst zur Eingabeaufforderung zurück, wenn ich drücke Ctrl+C. Mit & Kann ich die Eingabetaste drücken und es funktioniert.

126
user4951

sh ist die Standardeinstellung Bourne-kompatible Shell (normalerweise Bash oder Dash)

sys-snap.sh Ist ein Shell-Skript, das Befehle enthält, die sh ausführt. Da Sie seinen Inhalt nicht veröffentlichen, kann ich nur anhand seines Namens erraten, was er tut. Ich kann ein Skript finden, das sich auf CPanel mit demselben Dateinamen bezieht und eine Protokolldatei mit allen aktuellen Prozessen, der aktuellen Speichernutzung, dem Datenbankstatus usw. erstellt. Wenn das Skript mit einem Shebang-Zeile (#!/bin/sh Oder ähnlich), können Sie es mit chmod +x sys-snap.sh Ausführbar machen und direkt mit ./sys-snap.sh Starten, wenn es sich im aktuellen Verzeichnis befindet.

Mit & Startet der Prozess im Hintergrund, sodass Sie die Shell weiterhin verwenden können und nicht warten müssen, bis das Skript fertig ist. Wenn Sie es vergessen haben, können Sie den aktuell ausgeführten Prozess mit Ctrl-Z Beenden und im Hintergrund mit bg (oder im Vordergrund mit fg) fortsetzen. Weitere Informationen finden Sie unter Jobsteuerung

99
jofel

Dies wird unter Unix als job control Bezeichnet. Der & Weist die Shell an, den Befehl in den Hintergrund zu stellen. Dies bedeutet, dass der Befehl sys-snap.sh Weiter ausgeführt wird, Sie jedoch zu Ihrer Shell zurückkehren, damit Sie weiterhin parallele Befehle ausführen können.

Sie können die Liste der Jobs anzeigen, die derzeit mit dem Befehl jobs ausgeführt werden. Sie können mit dem Befehl fg zum Befehl zurückkehren (in den Vordergrund bringen). Dadurch wird der Befehl in den Zustand zurückgesetzt, in dem keine Eingabeaufforderung angezeigt wird und Sie eine Ausgabe ausführen müssen Ctrl- -C to kill den Prozess. Sie können diesen Vorgang jedoch suspend (pausieren) und ausgeben Ctrl- -Z. Dadurch wird sys-snap.sh Angehalten und Sie kehren zu Ihrer Eingabeaufforderung zurück. Sie können es dann mit dem Befehl bg in den Hintergrund stellen (als hätten Sie es mit dem & Ausgegeben, und es wird fortgesetzt läuft aus dem angehaltenen Zustand der Ctrl- -Z hatte es hineingesteckt.

Beachten Sie, dass Sie mehrere Jobs gleichzeitig haben können (wie durch jobs gezeigt):

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

Sie können sie anhand ihrer Auftragsnummer in den Hintergrund und in den Vordergrund stellen. %1 Ist sys-snap.sh Und %2 Ist another-script.sh. Wenn Sie fg oder bg ohne Argumente verwenden, wird der Befehl für den mit + In der obigen Ausgabe von jobs gekennzeichneten Job ausgeführt.

fg %1

setzt sys-snap.sh wieder in den Vordergrund, während another-script.sh im Hintergrund bleibt.

Sie können die ausstellen Ctrl- -C Wenn Sie Jobs ausführen, ohne sie mit dem Befehl kill in den Vordergrund stellen zu müssen, sendet kill %1 das Äquivalent von Ctrl- -C zu sys-snap.sh.

Wenn Sie die Bash-Shell verwenden, enthält der Befehl man bash Einen detaillierten Abschnitt unter dem Abschnitt "JOB CONTROL", der ausführlicher behandelt wird.

Der Name von sys-snap.sh Ist unter Unix-Dateinamen beliebig (mit einigen Ausnahmen wie Dynamic Loader-Dateien). Es ist nicht erforderlich, dass sie über bestimmte Dateierweiterungen verfügen, damit sie als Shell-Skript ausgeführt werden, andere Befehle wie Perl oder php usw. aufrufen können. Dies wird normalerweise verwendet, um Klarheit zu schaffen In diesem Fall handelt es sich um .sh, ein Shell-Skript, das die Bourne-Shell /bin/sh verwendet.

Der funktionale Teil von sys-snap.sh (Wenn Sie den Inhalt mit etwas wie dem Befehl less betrachten) ist das Shebang . In der ersten Zeile finden Sie wahrscheinlich eines von:

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

o.ä. Grundsätzlich wird ein Befehl nach #! (Wie /bin/sh) Ausgeführt und der Inhalt der restlichen Skriptdatei wird zeilenweise zugeführt. Beachten Sie, dass die Datei auch mit chmod ausführbar festgelegt werden muss, damit Sie sie als Befehl ausführen können. Wenn die Berechtigungen nicht festgelegt wurden, hat Shebang keine Auswirkung, da Sie entweder den Fehler erhalten würden:

bash: sys-snap.sh: command not found

oder wenn Sie es über den expliziten Pfad ./sys-snap.sh (. für das aktuelle Arbeitsverzeichnis) ausführen, erhalten Sie:

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

Die andere Alternative besteht darin, es ohne Ausführungsberechtigungen zu belassen und/bin/sh explizit aufzufordern, es auszuführen:

/bin/sh sys-snap.sh &
93
Drav Sloan

sh ist eine Shell. Welche Shell genau hängt vom System ab. Beispiel für ein System, das bash als Standard-Shell verwendet:

$ 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 wird eine Art Shell-Skript sein, also sh sys-snap.sh führt das Shell-Skript aus.

& bewirkt, dass der Shell-Prozess im Hintergrund ausgeführt wird. Ohne & es bleibt im Vordergrund, bis das Skript endet. Das Skript funktioniert so oder so. Es ist nur eine Frage des Wartens auf das Ende des Skripts oder nicht, bevor weitere Befehle ausgeführt werden.

4
frostschutz

Befindet sich Ihr Server im Hostgator?

Das Skript sys-snap.sh ist ein spezielles Skript, das vom Hostgator-Team geschrieben wurde, um alle Protokolldateien und Daten für das System zu erfassen. Daher verwenden sie die Ausgabe zur Überwachung und Erfassung der Systeminformationen.

1
tareq.t