Zusätzlich zu den Antworten von Martin, Ash und Kevin wird manchmal ein kaufmännisches Und angezeigt, das mathematisch für ein bitweises UND * verwendet wird :
$ echo $(( 11 & 7 ))
3
Falls Sie mit Bitoperatoren nicht vertraut sind:
11: 1011
7: 0111
-------- AND
3: 0011
In jeder Position gibt es ein Ein-Bit in der ersten Zahl UND die zweite Zahl, setzen Sie dieses Bit in der Antwort auf Eins.
* Die Funktion in Kevins Antwort wird als logisches UND bezeichnet.
Um die Antwort von Ash zu erläutern, kann das kaufmännische Und bei Verwendung in der Umleitung die Shell anweisen, einen Dateideskriptor zu kopieren. In diesem Befehl echo "hello" > outputfile 2>&1
bewirkt das kaufmännische Und, dass alle Ausgaben, die an den Standardfehler (stderr, Dateideskriptor 2) gesendet werden, an die gleiche Stelle gesendet werden wie die Standardausgabe (stdout, Dateideskriptor 1, Standardeinstellung für die linke Seite von >
). Der >& outputfile
Operator ist eine Abkürzung für > outputfile 2>&1
.
Auch neu in Bash 4 gibt es zwei neue Terminatoren für Klauseln in den case
Befehl ;&
und ;;&
die beeinflussen , ob ein Fall „fällt durch“ und, wenn ja, ob der nächste Test durchgeführt wird .
Bis auf weiteres angehalten.
quelle
>& filename
gibt sowohl stdout als auch stderr in dieselbe Datei aus. Wenn Sie nur stderr umleiten möchten (und stdout in Ruhe lassen möchten), tun Sie dies2> filename
. Was Ihre andere Frage betrifft, würden Sie höchstwahrscheinlich beidesnohup
und verwenden&
.logout
oderexit
-Befehl ausgeben können .In einem Bash-Shell-Skript wird das kaufmännische Und "&" verwendet, um Prozesse zu trennen:
Dadurch wird der Befehl find gegabelt und im Hintergrund ausgeführt (Sie können ihn jederzeit anhand seiner PID beenden).
quelle
So erhalten Sie Ihre Aufforderung umgehend zurück und führen den Prozess im Hintergrund aus.
Mit nohup kann der Hintergrundprozess fortgesetzt werden, auch nachdem sich der Benutzer abgemeldet hat (oder die initiierende Shell beendet hat).
> & Leitet sowohl die Standardausgabe als auch den Standardfehler in die Protokolldatei um.
& führt das Ganze im Hintergrund aus und gibt Ihnen umgehend eine Rückmeldung.
Erläuterung:
Jeder Linux-Prozess öffnet drei E / A-Kanäle, einen Eingang "stdin", einen Standardausgang "stdout" und einen Standardfehlerausgang "stderr". Sie können für Binärdateien verwendet werden, sind jedoch traditionell Text. Wenn die meisten Programme stdin schließen, werden sie beendet (dies kann vom Programmierer geändert werden).
Wenn die übergeordnete Shell beendet wird, ist stdin für die Kinder geschlossen, und (häufig, normalerweise) werden auch die Kinder beendet. Außerdem erhalten die Kinder das Softwaresignal SIGHUP, das angibt, dass der Benutzer (früher das Modem) "aufgelegt" hat und standardmäßig auch beendet wird. (Beachten Sie, dass ein Programmierer all dies ändern kann, wenn er das Programm schreibt.)
Was nohup also tut, ist, dem Kindprozess eine separate E / A-Umgebung zu geben, die die Ein- und Ausgänge mit etwas verknüpft, das nicht mit der Eltern-Shell verbunden ist, und das Kind vor dem Signal SIGHUP abzuschirmen. Sobald der Benutzer die Verbindung trennt, wird der Nohup-Hintergrundprozess von init (Prozess 1) angezeigt, nicht die Shell des Benutzers.
nohup
Kann den Job jedoch nicht vollständig ausführen, wenn der Prozess im Vordergrund ausgeführt wird. Wird daher&
verwendet, um das Programm im Hintergrund auszuführen, wo es problemlos mit oder ohne angemeldeten Benutzer ausgeführt werden kann.quelle
Zusätzlich zu @ Martins Antwort: Die andere Verwendung von kaufmännischem Und (
>&
wie oben) ist das Erfassen von beidenstdout
undstderr
. Wenn Sie die Ausgabe nur mit '>' in eine Datei umleiten, wird in der Regel nur die Ausgabe mitstdout
fehlenden Fehlern ausgegeben .quelle
Neben der Antwort von Martin und Ash wird manchmal die Verwendung eines
&&
Tokens angezeigt . Dies wird verwendet, um zu sagen: "Führen Sie den zweiten Befehl genau dann aus, wenn der erste Befehl erfolgreich ausgeführt wurde." Ein gut geschriebener Befehl wird bei Fehlern nicht erfolgreich beendet.quelle
Martins Antwort ist gut, aber ein bisschen mehrdeutig. Der Befehl wird immer gegabelt und ausgeführt, aber das normale Shell-Verhalten besteht darin, auf den Befehl zu warten, bis er beendet wird. Das kaufmännische Und stellt es in den Hintergrund, damit Sie die Eingabeaufforderung Ihres Terminals erhalten und andere Aktionen ausführen können. Wenn der Prozess Daten an stdout oder stderr ausgibt, wird dies mit dem, was Sie an der Eingabeaufforderung tun, vermischt und kann Sie verwirren. Deshalb leiten Sie dann mit> & /path/to/logfile.txt um.
Als Reaktion auf George2 besteht das normale Verhalten beim Beenden einer Shell darin, das SIGHUP-Signal an alle Prozesse in derselben Prozessgruppe zu senden (im Wesentlichen an das, was Sie erzeugt haben), und diese werden normalerweise beendet. Wenn Sie möchten, dass dies auch nach dem Schließen des Shell-Prozesses fortgesetzt wird, können Sie den Befehl nohup verwenden, damit sie dieses Signal ignorieren und weiter ausgeführt werden. Es gibt einen speziellen Namen für diesen Prozesstyp, der als Daemon-Prozess (ausgesprochen 'Dämon') bezeichnet wird.
quelle