So speichern Sie den Terminal-Befehlsausgang (Bash) in einer Textdatei. Umleitung der Standardausgabegeräte-Eingabestrecke Umleiten der Standardausgabe in die Datei

Das Standardsystem öffnet immer drei "Datei" - (Tastatur), (Bildschirm), (Bildschirm) und (Ausgabefehlermeldungen auf dem Bildschirm). Diese, und alle anderen offenen Dateien können überwältigt werden. In diesem Fall bedeutet der Begriff "Umleitung", um die Ausgabe von Dateien, Befehle, Programme, Skript oder sogar einem separaten Block in dem Skript zu erhalten (siehe Beispiel 3-1 und Beispiel 3-2) und übertragen Sie sie an den Eingang zu Eine andere Datei, Befehl, Programm oder Skript.

Ein Dateigriff ist mit jeder geöffneten Datei verbunden. File-Deskriptoren und - 0, 1 bzw. 2. Beim Öffnen zusätzlicher Dateien bleiben Deskriptoren von 3 bis 9 nicht unbesetzt. Manchmal können zusätzliche Deskriptoren einen guten Service dienen, wodurch ein Link mit oder. Dies vereinfacht die Erstattung von Deskriptoren in einem normalen Zustand nach komplexen Manipulationen mit Umleitungen und Permutationen (siehe Beispiel 16-1).

Command_output\u003e stdout-umleitung in die Datei. # Wenn keine Datei vorhanden ist, erstellt es, andernfalls wird es überschrieben. Ls -lr\u003e dir-tree.list # erstellt eine Datei mit einer Liste der Verzeichnisstruktur. :\u003e Filename # Operation\u003e Cine-Datei "Dateiname" auf die Länge Null. # Wenn die Datei nicht vorhanden ist, bevor der Vorgang ausgeführt wird, erstellt er eine neue Datei mit einer Länge mit einer Länge von Null (derselbe Effekt gibt den Befehl "Touch"). # Symbol: Handlungen hier in der Rolle des Ortes, ohne etwas auszuscheiden. \u003e Filename # Operation\u003e Curl-Datei „Dateiname“ auf die Länge Null. # Wenn die Datei nicht vorhanden ist, bevor der Vorgang ausgeführt wird, erstellt er eine neue Datei mit einer Länge mit einer Länge von Null (derselbe Effekt gibt den Befehl "Touch"). # (Das gleiche Ergebnis wie oben -. ":\u003e", Aber diese Option ist inoperabel # in einigen Befehls-Shells) Command_Output \u003e\u003e # Redirect stdout (Ausgang) in die Datei. # Erstellt eine neue Datei, wenn sie nicht vorhanden ist, andernfalls - fügt an das Ende der Datei. # Einzeiliger Umleitungsbefehle # (betrifft nur die Zeile, in der sie gefunden werden): # ----------------------- 1\u003e Filename # Umleitung (stdout ) auf „Dateinamen“ Datei. 1 \u003e\u003e Filename # Redirect Ausgabe (stdout) in die Datei „Dateiname“, öffnet die Datei im Additionsmodus. 2\u003e Filename # Studerr Umleitung auf Filename-Datei. 2 \u003e\u003e Filename # Stderr Umleitung auf die Datei „Dateiname“, öffnet die Datei im Additionsmodus. &\u003e Filename # Umleitung stdout und stderr zu Datei „Dateiname“. # \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d # stdout-Umleitung nur für eine Zeile. Logfile \u003d SCRIPT.LOG echo $ LogFile \\ "wird diese Zeile in der \\ aufgezeichnet werden" "Datei." 1\u003e $ logFile ECHO "Diese Zeile wird zum Ende der Datei \\" $ logfile \\ "hinzugefügt." 1 \u003e\u003e $ logFile ECHO "Diese Zeile wird auch zum Ende der Datei \\" $ logfile \\ "hinzugefügt." 1 \u003e\u003e $ logFile ECHO "Diese Zeile wird auf dem Bildschirm angezeigt und fällt nicht in die Datei" $ logfile \\ "." # Nach jeder Zeile wird die Umleitung automatisch "Reset" gemacht. # Redirect Stderr, nur für eine Zeile. ErrorFile \u003d script.errors bad_command1 2\u003e $ errorFile # Fehlermeldung wird in $ errorFile verfasst. Bad_Command2 2 \u003e\u003e $ Errorfile # Fehlermeldung wird am Ende $ Errorfile hinzugefügt werden. BAD_COMMAND3 # Fehlermeldung wird auf Stderr angezeigt, # + und wird bei $ Errorfile nicht fallen. # Nach jeder Zeile wird auch die Umleitung automatisch "zurückgesetzt". # \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d 2\u003e & 1 # Umleitung stderr auf stdout. Fehlermeldungen werden auf dieselbe, wo und Standardausgabe übertragen. I\u003e iCH. im j.. # Ausgabe an eine Datei mit einem Deskriptor iCH. übergibt in eine Datei mit einem Deskriptor j.. \u003e & J # Umleitungsdatei mit Deskriptor 1 (stdout) in eine Datei mit einem Deskriptor j.. # Ausgabe an stdout wird mit einem Deskriptor an eine Datei übergeben j.. 0< FILENAME < FILENAME # Ввод из файла. # Парная команде ">", trifft oft in Kombination mit ihr. # # Grepr-Suchwort dateiname # Datei "Dateiname" ist offen für das Lesen und Schreiben und Bindungen an den Deskriptor "J". # Wenn "Dateiname" fehlt, wird es erstellt. # Wenn der Deskriptor "j" nicht angegeben ist, dann standardmäßig der Deskriptor 0, danshin darüber hinaus. # # Als einer der Anwendungen dieses - Schreiben Sie in eine bestimmte Position in der Datei. Echo 1234567890\u003e Datei # Schreiben Sie eine Zeichenfolge in die Datei "Datei". Exec 3.<> Dateiansicht "Datei" und Krawatte mit einem Deskriptor 3. Lesen Sie -n 4<&3 # Прочитать 4 символа. echo -n . >& 3 # Schreiben Sie ein Punkt-Symbol. Exec 3\u003e & - Schließen Sie Deskriptor 3. CAT-Datei # \u003d\u003d\u003e 1234.67890 # Random Access und nur! | # Förderer (Kanal). # Universal-Tool zum Kombinieren von Teams in einer Kette. # Sieht aus wie "\u003e", aber in der Tat - umfangreicher. # Verwendet, um Befehle, Skripte, Dateien und Programme in einer Kette (Förderer) zu kombinieren. Katze * .txt | Sortieren | UNIQ\u003e Ergebnisdatei # Inhalt aller Dateien .txt ist sortiert, wiederholende Zeichenfolgen werden gelöscht, # Das Ergebnis wird in der Datei "Ergebnisdatei" gespeichert.

Umleitungsbedienung und / oder Förderer können in einer Befehlszeile kombiniert werden.

befehl.< input-file > Ausgabedatei-Befehl1 | Command2 | Command3\u003e Ausgabedatei Siehe Beispiel 12-23 und ein Beispiel A-17.

Es dürfen mehrere Streams in einer Datei umleiten.

ls -yz \u003e\u003e command.log 2\u003e & 1 # Nachricht über die falsche Option "YZ" im Befehl "LS" wird in der Datei "command.log" aufgenommen. # Weil stderr in eine Datei umgeleitet wird.

File-Deskriptoren schließen.

Schließen Sie den Eingabedatei-Deskriptor.

0<&-, <&-

Schließen Sie den Ausgabedateikriptor.

1>&-, >&-

Tochterprozesse erben offene Dateibeschreibungen. Aus diesem Grund funktionieren Förderer. Um das Erbschaft von Deskriptoren zu verhindern, schließen Sie sie vor dem Start eines untergeordneten Prozesses.

# Nur stderr wird auf den Förderer übertragen. EXEC 3\u003e & 1 # Speichern Sie den aktuellen "Status" stdout. LS -L 2\u003e & 1\u003e & 3 3\u003e & - | Grep Bad 3\u003e & - Schließen Sie den Schreibtisch. 3 für "grep" (aber nicht für "ls"). # ^^^^^^^^^ Exec 3\u003e & - # Schließt es jetzt für den Rest des Skripts. # Danke s.c.

Weitere Informationen zur E / A-Umleitung finden Sie in Anhang D.

16.1. Mit der Hilfe des Teams exec.

Mannschaft exec. Redibriert die Eingabe in die Datei. Von nun an, der gesamte Eingang anstelle von (ist normalerweise die Tastatur), wird aus dieser Datei hergestellt. Dadurch ist es möglich, den Inhalt der Datei, der Zeichenfolge in der Zeichenfolge zu lesen und jede eingegebene Zeile mit SED und / oder awk zu analysieren.

Beispiel 16-1. Umleitung mit EXEC.

#! / bin / bash # Umleitung stdin mit "EXEC". Exec 6.<&0 # Связать дескр. #6 со стандартным вводом (stdin). # Сохраняя stdin. exec < data-file # stdin заменяется файлом "data-file" read a1 # Читается первая строка из "data-file". read a2 # Читается вторая строка из "data-file." echo echo "Следующие строки были прочитаны из файла." echo "——————————————" echo $a1 echo $a2 echo; echo; echo exec 0<&6 6<&- # Восстанавливается stdin из дескр. #6, где он был предварительно сохранен, #+ и дескр. #6 закрывается (6<&-) освобождая его для других процессов. # # <&6 6<&- дает тот же результат. echo -n "Введите строку " read b1 # Теперь функция "read", как и следовало ожидать, принимает данные с обычного stdin. echo "Строка, принятая со stdin." echo "—————————" echo "b1 = $b1" echo exit 0

Ähnlich, Design. exec\u003e Dateiname. Weiterleiten, um die Ausgabe in eine angegebene Datei umzuleiten. Danach wird die gesamte Ausgabe von den in der Regel gerichteten Befehle in dieser Datei angezeigt.

Beispiel 16-2. Umleitung mit EXEC.

#! / Bin / bash # neu zugeordnet-stdout.sh logFile \u003d logFile.txt Exec 6\u003e & 1 # Binde den Schreibtisch. # 6 mit stdout. # Sparen stdout. Exec\u003e $ logFile # stdout wird durch die Datei "logFile.txt" ersetzt. # ---------------------- # # Die gesamte Ausgabe von Befehlen, in diesem Block, wird in die $ logfile-Datei geschrieben. Echo -n "logfile:" Datum Echo "---------------" Echo Echo "Ausgabe des Befehls" LS-SELEGEN "" ECHO LS-ECHO; Echo Echo "Befehlsausgabe \\" df \\ "" Echo df # --------------------- # Exec 1\u003e & 6 6\u003e & - Restore stdout und schliessickig. # 6. ECHO ECHO "\u003d\u003d stdout wiederhergestellt an den Standardwert \u003d\u003d" Echo ls-echo-Ausgang 0

Beispiel 16-3. Gleichzeitige Umleitung von Geräten und Verwendung des Befehls Exec

#! / Bin / bash # upperconv.sh # Umwandlung von Zeichen in der Eingabedatei in das obere Register. E_FILE_ACCESS \u003d 70 E_Wrong_ARGS \u003d 71 Wenn [!! -R "$ 1"] # Datei ist zum Lesen verfügbar? Dann Echo "aus der angegebenen Datei nicht gelesen!" Echo "Upload-Bestellung: $ 0 Eingabedatei-Ausgabedatei" EXIT $ E_FILE_ACCESS FI # Wenn die Eingabedatei ($ 1) nicht angegeben ist # + Completion Code ist derselbe. Wenn [-z "$ 2"] dann Echo "Sie müssen die Ausgabedatei festlegen." Echo "Upload-Bestellung: $ 0 Input-Datei Ausgabedatei" EXIT $ E_Wrong_Args Fi Exec 4<&0 exec < $1 # Назначить ввод из входного файла. exec 7>& 1 EXEC\u003e $ 2 # Weisen Sie der Ausgabedatei die Ausgabe zu. # Es wird davon ausgegangen, dass die Ausgabedatei für die Aufnahme # verfügbar ist (Scheck hinzufügen). # ----------------- cat - | TR A-Z A-Z # Übersetzung in den Großbuchstaben # ^^^^^ # Lesung mit stdin. # ^^^^^^^^^^^ # Schreiben in stdout. # Jedoch stdin und stdout wurden jedoch umgeleitet. # ----------------------------------------------\u003e & - Wiederherstellen von stdout. EXEC 0.<&4 4<&- # Восстановить stdin. # После восстановления, следующая строка выводится на stdout, чего и следовало ожидать. echo "Символы из \"$1\" преобразованы в верхний регистр, результат записан в \"$2\"." exit 0

Nächster:Dateifehlerumleitung. Oben:E / A-Umleitung Bisherige:Weiterleiten von Input aus der Datei Inhalt. Index

Umleitung der Ausgabe an die Datei

Um den Standardausgang in der Datei umzuleiten, verwenden Sie den Operator '\u003e'.

Linux E / A-Reduktion

Geben Sie nach dem Befehlsnamen-Operator\u003e an, und dann den Namen der Datei, die als Ausgabeempfänger dient. Um beispielsweise die Ausgabe der Ergebnisse des Programms in die Datei aufzunehmen, geben Sie Folgendes ein:

Wenn Sie den Standardausgang in eine vorhandene Datei umleiten, wird es von Anfang an überschrieben. Um eine Standardausgabe an den Inhalt einer vorhandenen Datei hinzuzufügen, müssen Sie den Operator "" 'verwenden. Um beispielsweise die Bedienungsergebnisse hinzuzufügen, wenn Sie das Programm in der Datei neu starten, geben Sie Folgendes ein:

Alex Otwagin 2002-12-16.

Das Programm ist in der Regel wertvoll, da er die Daten verarbeiten kann: einnehmen, um einen anderen auszugeben, und es kann tatsächlich als Daten dienen: Text, Zahlen, Ton, Video ... Ein- und Ausgangsströme für den Befehl werden aufgerufen eingang und ausgabe. Eingabe- und Ausgangsströme Jedes Programm kann etwas sein. Wenn Sie in jedem Prozess obligatorisch erstellen, empfängt es in der sogenannten standardeingang (Standardeingabe, stdin) und standardausgabe (Standardausgabe, stdout) und standardfehlerausgabe. Standardfehler, stderr).

Standard-E / A-Streams sollen hauptsächlich für das Teilen von Textinformationen bestimmt. Es ist nicht einmal wichtig, wer mit Hilfe von Texten kommuniziert: Eine Person mit einem Programm oder einem Programm ist interstitiert - die Hauptsache ist, dass sie einen Datenübertragungskanal haben und dass sie in derselben Sprache "in derselben Sprache sprachen.

Mit dem Textprinzip mit der Maschine können Sie von bestimmten Teilen des Computers ablenken, wie eine Systemtastatur und eine Grafikkarte mit einem Monitor, wenn man einen einzigen terminalMit dem der Benutzer in den Text (Befehle) eingibt und an das System überträgt und das System die benutzer erforderlichen Daten und Nachrichten (Diagnose und Fehler) anzeigt. Ein solches Gerät wird aufgerufen terminal. Im Allgemeinen Fall ist das Terminal ein Benutzeranmeldung auf das System, das Textinformationen übertragen kann. Das Terminal kann ein separates externes Gerät sein, das über den seriellen Datenanschluss an einen Computer angeschlossen ist (in einem Personalcomputer, der als "COM-Port" bezeichnet wird). Die Rolle des Terminals kann funktionieren (mit etwas Unterstützung vom System) und einem Programm (z. B. Xterm oder SSH). Schließlich, virtuelle Konsolen - Auch Terminals, nur organisierte Software mit geeigneten modernen Computergeräten.

Bei der Arbeit mit der Befehlszeile ist der Standardbefehlsschaleneingang der Tastatur zugeordnet, und der Standardausgang und die Ausgabe von Fehlern - mit dem Monitorbildschirm (oder terminalem Emulatorfenster). Lassen Sie uns im Beispiel des einfachsten Teams zeigen. Normalerweise team. katze. Liest Daten aus allen Dateien, die als Parameter aufgelistet sind, und sendet eine direkt an die Standardausgabe (stdout) gelesene. Folglich das Team

/ Home / Larry / Papiere # Katzengeschichte-Final Masters-These

der Inhalt der Datei zeigt zunächst auf dem Bildschirm und dann die Datei an.

Wenn der Dateiname jedoch nicht angegeben ist, wird das Programm angezeigt katze. Liest die Eingabe von stdin und gibt sie sofort an stdout zurück (ohne wechseln). Daten durchlaufen katze.wie durch das Rohr. Lassen Sie uns ein Beispiel geben:

/ Home / Larry / Paper # Cat Hallo dort. Hallo. Tschüss. Tschüss. StrgD./ Home / larry / papiere #

Jede von der Tastatur eingeführte Zeile kehrt das CAT-Programm sofort zum Bildschirm zurück. Bei Eingabe von Informationen von Standardeingang wird das Ende des Textes durch Eingabe einer speziellen Tastenkombination angezeigt StrgD..

Wir geben ein anderes Beispiel. Mannschaft sortieren. Liest die Zeilen des Eingabetextes (auch von STDIN, sofern der Dateiname nicht angegeben ist) und ergibt einen Satz dieser Zeilen in einem bestellten Formular auf der STDOUT. Überprüfen Sie ihre Aktion.

/ Home / Larry / Papiere # Bananen-Karotten sortieren CTRES CTRL + D Äpfel Bananen Karotten / Home / Larry / Papiere #

Wie Sie nach dem Pressen sehen können StrgD., sortieren. in alphabetische Reihenfolge bestellte Zeichenfolgen gebracht.

Standardeingabe- und Standardleistung

Angenommen, Sie möchten die Ausgabe des Sortierbefehls an eine Datei senden, um die alphabetische Liste auf der Festplatte zu speichern. Mit der Befehlsschale können Sie die Standardausgabe des Befehls mit dem Zeichen in der Datei umleiten. Lassen Sie uns ein Beispiel geben:

/ Home / Larry / Papiere # Sortieren\u003e Shopping-Liste Bananen-Karotten Äpfel StrgD./ Home / larry / papiere #

Sie können sehen, dass das Ergebnis des Sortiers nicht angezeigt wird, sondern in der benannten Datei gespeichert wird. Zeigt den Inhalt dieser Datei auf dem Bildschirm an:

/ Larry / papier # katze einkaufen-list äpplungen bananen karotten / home / larry / papiere #

Lassen Sie die anfängliche ungeordnete Liste jetzt in der Datei. Diese Liste kann mit dem Befehl angeordnet werden. sortieren.Wenn Sie dies angeben, dass es aus dieser Datei gelesen wird, und nicht von seiner Standardeingabe, und leiten Sie den Standardausgang die Standardausgabe in die Datei, wie oben erfolgen) um. Beispiel:

/ Home / larry / papiere # sortieren von artikel einkaufen / home / larry / papiere # katze einkaufen-list äpfel bananen karotten / home / larry / papiere #

Sie können jedoch sonst nicht nur die Standard-Schlussfolgerung umleiten, sondern auch standardeingang Dienstprogramme aus der Datei mit dem Symbol dafür:

/ Home / larry / papiere # sortieren< items apples bananas carrots /home/larry/papers#

Ergebnisteam sortieren.< items Äquivalentes Team. artikel sortieren.Der erste von ihnen zeigt jedoch folgendes: Bei der Ausgabe eines Teams sortieren.< items Das System verhält sich, als ob die in der Datei enthaltenen Daten von der Standardeingabe eingeführt wurden. Die Umleitung wird von der Befehlshülle ausgeführt. Mannschaft sortieren. Der Dateiname wurde nicht berichtet: Dieser Befehl lese Daten von seiner Standardeingabe, als ob wir sie von der Tastatur eingeben.

Wir stellen das Konzept vor filter. Der Filter ist ein Programm, das Daten aus dem Standardeingang liest, in gewisser Weise, in gewisser Weise Prozesse und das Ergebnis an die Standardausgabe sendet. Wenn die Umleitung angewendet wird, können Dateien als Standardeingang und Ausgabe fungieren. Wie oben erwähnt, sind standardmäßig stdin und stdout die Tastatur bzw. den Bildschirm. Das Sortierprogramm ist ein einfacher Filter - es sortiert die Eingabedaten und sendet das Ergebnis an den Standardausgang. Ein vollständig einfacher Filter ist das Programm katze. - Sie tut nichts mit den Eingabedaten, leitet sie jedoch einfach an den Ausgang weiter.

Oben hat bereits gezeigt, wie Sie das Sortiment als Filter verwenden. In diesen Beispielen wurde davon ausgegangen, dass sich die anfänglichen Daten in einer bestimmten Datei befinden oder dass diese Quelldaten von der Tastatur eingegeben werden (Standardeingabe). So tun Sie jedoch, ob Sie die Daten sortieren möchten, die das Ergebnis eines anderen Befehls ergibt, zum Beispiel, ls?

Wir sortieren die Daten in der umgekehrten alphabetischen Reihenfolge; Dies erfolgt durch die Teamoption. sortieren.. Wenn Sie die Dateien im aktuellen Verzeichnis in der umgekehrten alphabetischen Reihenfolge auflisten möchten, ist dies eine der Möglichkeiten, dies zu tun.

E / A-Umleitung

Wenden Sie den ersten Befehl an ls:

/ Home / larry / papiere # ls englischer Liste Historie-Final Masters-Thesis Notes / Home / Larry / Porlower

Leiten Sie nun die Ausgabe des Befehls um ls In der ernannten Dateiliste drucken

/ Larry / papiere # ls\u003e file-list / home / larry / papiere # sort -r file-list Notes Master-Thesis Geschichte-Finale Englischliste / Haus / Larry / Papier #

Hier ist die Ausgabe des Teams ls In der Datei gespeichert, und dann wurde diese Datei vom Befehl verarbeitet sortieren.. Dieser Pfad ist jedoch konstant und erfordert die Verwendung einer temporären Datei zum Speichern von Programmausgängen. ls.

Die Lösung in dieser Situation kann die Schöpfung sein angedockte Befehle (Pipelines). Das Docking wird von einer Befehlshülle ausgeführt, die das erste Team an den zweiten Befehl an den Stdin sendet. In diesem Fall möchten wir stdout-Befehle senden ls auf dem stdin-team. sortieren.. Das Symbol wird zum Andocken verwendet, wie in dem folgenden Beispiel gezeigt:

/ Home / larry / papiere # ls | Sortieren -R Notizen Masters-Thesis Geschichte-Finale English-List / Home / Larry / Papiere #

Dieses Team ist kürzer als die Kombination von Teams, und es ist einfacher, es zu gewinnen.

Betrachten Sie ein anderes nützliches Beispiel. Mannschaft

/ Home / larry / papiere # ls / usr / bin

gibt eine lange Liste von Dateien an. Die meisten dieser Liste fliegen zu schnell um den Bildschirm herum, damit der Inhalt dieser Liste gelesen werden kann. Versuchen wir, den Befehlsbefehl zu verwenden, um diese Teile der Teile anzuzeigen:

/ Home / larry / papiere # ls / usr / bin | Mehr

Jetzt können Sie diese Liste übertakten.

Sie können weiter gehen und mehr als zwei Teams füsten. Betrachten Sie das Team kopf.Welches ist ein Filter der folgenden Eigenschaft: Es zeigt die ersten Zeilen vom Eingabestrom an (in unserem Fall wird der Ausgang von mehreren angedockten Befehlen an den Eingängen eingereicht). Wenn wir den Namen der Datei im aktuellen Verzeichnis im letzten Alphabet anzeigen möchten, können Sie den folgenden langen Befehl verwenden:

/ Home / larry / papiere # ls | sort -r | Kopf -1 Notizen / Home / Larry / Papiere \\ #

wo team. kopf. Zeigt die erste Zeile des Eingabestroms von Linien an (in unserem Fall besteht der Durchfluss aus Daten aus dem Befehl ls), sortiert in umgekehrter alphabetischer Reihenfolge.

Verwendung von Docking-Befehlen (Förderer)

Die Wirkung der Verwendung des Symbols zum Weiterleiten der Dateiausgabe ist destruktiv; Mit anderen Worten, das Team

/ Home / Larry / Papiere # LS\u003e Dateiliste

es wird den Inhalt der Datei zerstört, wenn diese Datei zuvor vorhanden ist, und erstellt an seiner Stelle eine neue Datei.

Wenn die Umleitung stattdessen mit den Zeichen durchgeführt wird, wird der Ausgang auf das Ende der angegebenen Datei zurückgeführt, während der Quellinhalt der Datei nicht zerstört wird. Zum Beispiel das Team

/ Home / larry / papiere # ls \u003e\u003e Dateiliste

attribute der Ausgabe des Teams ls Am Ende der Datei.

Es sollte berücksichtigt werden, dass die Umleitung der Ein- und Ausgabe- und Kommandobefehle durch Befehlsschalen durchgeführt wird, die die Verwendung von Zeichen unterstützen, und. Die Befehle selbst können diese Zeichen nicht wahrnehmen und interpretieren.

Unsteraktische Umleitung der Leistung

So etwas, was Sie tun sollten, was Sie brauchen?

Überprüfen Sie es: WineTee

Keine Notwendigkeit von Cygwin.

Ich habe jedoch einige Probleme angetroffen und gemeldet.

Sie können auch http://unxutils.sourceforge.net/ überprüfen, da es ein T-Shirt enthält (und keine Cygwin brauchen), aber seien Sie vorsichtig, dass das Wochenende EOL unix-ähnlich ist.

Und zuletzt, aber nicht weniger wichtig, wenn Sie PowerShell haben, können Sie ein Tee-Objekt ausprobieren. Geben Sie die PowerShell-Konsole für weitere Informationen ein.

Es funktioniert, obwohl es ein bisschen hässlich ist:

Es ist etwas flexibler als einige andere Lösungen, da es auf seiner eigenen Art und Weise arbeitet, sodass Sie es verwenden können, um hinzuzufügen.

Ich benutze es in Batch-Dateien ziemlich viel, um Meldungen zu registrieren und anzuzeigen:

Ja, Sie können den Echo-Anweisungen einfach wiederholen (einmal für den Bildschirm und das zweite Mal auf der Protokolldatei), aber es sieht so schlecht aus, und dies ist ein Serviceproblem.

Umleitung der Eingabe und des Ausgangs

Zumindest müssen Sie nicht an zwei Stellen Änderungen an Nachrichten vornehmen.

Bitte beachten Sie, dass _ nur ein kurzer Dateiname ist, sodass Sie es am Ende Ihrer Batchdatei löschen müssen (wenn Sie eine Batch-Datei verwenden).

Dadurch erstellt eine Protokolldatei mit aktueller Uhrzeit und Zeit, und Sie können die Konsolenleitungen während des Prozesses verwenden.

Wenn Sie ein Cygwin auf dem Weg zur Windows-Umgebung haben, können Sie Folgendes verwenden:

Eine einfache Anwendung c # -Konsole würde einen Trick machen:

Um dies zu verwenden, geben Sie einfach den Befehl Quell-Befehl an das Programm an und geben Sie den Pfad an beliebige Dateien an, für den Sie die Ausgabe duplizieren möchten. Beispielsweise:

Es gibt ein Suchergebnisse sowie Speichern der Ergebnisse in Dateien1.txt- und files2.txt-Dateien.

Bitte beachten Sie, dass es nicht viel (nichts!) Auf den Fehlerbehandlungswegen gibt (nichts!).

Ich suchte auch dieselbe Lösung nach einem kleinen Versuch, ich konnte es erfolgreich auf der Befehlszeile durchführen. Hier ist meine Entscheidung:

Er erfasst sogar jedes Pause-Team.

Eine Alternative ist TEE STDOUT für stderr in Ihrem Programm:

Dann in Ihrem DOS-Batchfile:

Stdout wechselt in die Protokolldatei, und stderr (die gleichen Daten) werden auf der Konsole angezeigt.

So zeigen Sie die Ausgabe in die Datei an und umleiten Sie. Angenommen, wenn ich den Befehl dos, dir\u003e test.txt verwende, wird dieser Befehl die Ausgabe in der Datei test.txt ohne Angabe von Ergebnissen umleitet. So schreiben Sie einen Befehl zum Ausgeben und Weiterleiten von Ausgang in einer Datei mithilfe von DOS, d. H. Windows-Befehlszeile und nicht in Unix / Linux.

Sie finden diese Befehle in Bitescripting (http://www.bitersonscripting.com) nützlich.

Dies ist eine Variante der vorherigen Antwort MTS, fügt jedoch einige Funktionen hinzu, die für andere nützlich sein können. Hier ist die Methode, die ich benutzt habe:

  • Der Befehl wird als Variable eingestellt, die später im Code verwendet werden kann, um das Befehlsfenster anzuzeigen und zur Protokolldatei hinzuzufügen
    • das Team vermeidet die Umleitung mit dem Karottensymbol, sodass die Befehle anfänglich nicht geschätzt werden
  • Eine temporäre Datei wird mit einem Dateinamen erstellt, der ähnlich wie eine Paketdatei benannt wird, die die Befehlszeilenparameter-Erweiterungssyntax verwendet, um den Befehlsdateinamen zu erhalten.
  • Das Ergebnis wird zu einer separaten Protokolldatei hinzugefügt.

Hier ist die Reihenfolge der Befehle:

  1. Ausgabe- und Fehlermeldungen werden an eine temporäre Datei gesendet.
  2. Der Inhalt der temporären Datei lautet:
    • zur Protokolldatei hinzugefügt
    • schlussfolgerung des Befehlsfensters
  3. Temporäre Datei mit der Nachricht wird gelöscht

Hier ist ein Beispiel:

Somit kann der Befehl nach späteren Befehlen in einer Batchdatei einfach hinzugefügt werden, die viel sauberer aussieht:

Es kann am Ende anderer Befehle hinzugefügt werden. Soweit ich beurteilen kann, funktioniert es, wenn Nachrichten mehrere Zeilen haben. Der folgende Befehl zeigt beispielsweise zwei Zeilen an, wenn eine Fehlermeldung vorliegt:

Ich stimme mit Brian Rasmussen zu, Port Unxutils ist der einfachste Weg, um es zu tun. Im Abschnitt "Batch-Dateien" der Scripting-Rob van der Woude-Seiten bieten viele Informationen zur Verwendung von MS-DOS- und CMD-Befehlen. Ich dachte, er könnte seine eigene Lösung für Ihr Problem haben, und nachdem ich dort thee.bat graben kann, fand ich TEE.BAT, der dies zu sein scheint, ist das MS-DOS-Batch-Sprachpaket. Dies ist eine ziemlich komplizierte Batchdatei, und ich neige dazu, den UNXUTILS-Port zu verwenden.

Ich installiere Perl auf den meisten meiner Autos, sodass die Antwort Perl verwendet: tee.pl

dir | Perl tee.pl oder katalog | Perl Tee.pl dir.bat.

roh und ungeprüft.

Sie sind bereits mit zwei Arbeitsmethoden vertraut, mit der Tatsache, dass wir von den Befehlszeilenszenarien angezeigt werden:

  • Zeigt Ausgabedaten auf dem Bildschirm an.
  • Weiterführung in die Datei.
Manchmal muss etwas auf dem Bildschirm angezeigt werden, und etwas ist, um in die Datei zu schreiben, so dass Sie damit umgehen müssen, wie in Linux verarbeitet wird, und der Ausgang wird verarbeitet, was bedeutet, dass Sie lernen, wie Sie die Ergebnisse der Skripts anrufen notwendig. Beginnen wir mit einem Gespräch über Standard-Datei-Deskriptoren.

Standard-Datei-Deskriptoren.

Alle in Linux sind Dateien, einschließlich Eingabe und Ausgabe. Das Betriebssystem identifiziert Dateien mithilfe von Deskriptoren.

Jeder Prozess darf bis zu neun offene Dateideskriptoren verfügen. Bash Shell behält sich die ersten drei Deskriptoren mit den Kennungen 0, 1 und 2 vor, das bedeutet sie.

  • 0, stdin - Standardeingangsfluss.
  • 1, stdout - Standard-Ausgangsstrom.
  • 2, stderr - Standardfehler.
Diese drei speziellen Griffs handhaben die Eingabe und Ausgabe von Daten im Skript.
Sie müssen die Standardströme herausfinden. Sie können mit der Grundlage verglichen werden, mit der die Wechselwirkung von Skripten mit der Außenwelt errichtet wird. Betrachten Sie die Details darüber.

Stdin

Stdin ist ein Standard-Shell-Eingabestrom. Für Terminal ist Standardeingang eine Tastatur. Wenn in Szenarien das Input-Umleitungssymbol verwenden -< , Linux заменяет дескриптор файла стандартного ввода на тот, который указан в команде. Система читает файл и обрабатывает данные так, будто они введены с клавиатуры.

Viele Bash-Befehle akzeptieren die Eingabe von STDIN, wenn die Datei die Datei nicht angibt, aus der die Daten ergriffen werden sollen. Dies gilt beispielsweise für den CAT-Befehl.

Wenn Sie den CAT-Befehl an der Eingabeaufforderung eingeben, ohne die Parameter anzugeben, dauert es die Eingabe von STDIN. Nachdem Sie die nächste Zeichenfolge eingegeben haben, zeigt Cat es einfach auf dem Bildschirm an.

Studout

STDOUT - Standard-Shell-Ausgangsstrom. Standardmäßig ist dies ein Bildschirm. Die meisten Bash befiehlt Ausgabedaten in stdout, was zu ihrem Erscheinungsbild in der Konsole führt. Die Daten können in die Datei umgeleitet werden, indem sie an den Inhalt angeschlossen werden, denn dies dient als Befehl \u003e\u003e.

Wir haben also eine bestimmte Datendatei, zu der wir mit diesem Befehl andere Daten hinzufügen können:

PWD \u003e\u003e MyFile.
Was den PWD zurückziehen wird, wird der MyFile-Datei hinzugefügt, und die darin vorhandenen Daten werden überall nicht angezeigt.

Umleitung der Befehlsausgabe in die Datei

Während alles in Ordnung ist, aber was ist, wenn Sie versuchen, etwas wie folgt auszuführen, wenden Sie sich an die nicht vorhandene XFILE-Datei, um das alles zu denken, um eine Fehlermeldung an die MyFile-Datei zu erstellen.

Ls -l xfile\u003e myfile
Nachdem Sie diesen Befehl ausgeführt haben, werden die Fehlermeldungen auf dem Bildschirm angezeigt.


Versuch, an eine nicht vorhandene Datei anzusprechen

Wenn Sie versuchen, an eine nicht vorhandene Datei anzusprechen, wird ein Fehler generiert, aber die Shell überwacht Fehlermeldungen nicht an der Datei, ziehen sie auf dem Bildschirm zurück. Wir wollten jedoch Fehlermeldungen, um die Datei einzugeben. Was zu tun ist? Die Antwort ist einfach - Verwenden Sie den dritten Standarddeskriptor.

Stderr.

Stderr ist ein Standard-Shell-Fehlerstrom. Standardmäßig zeigt dieser Deskriptor auf das gleiche, was stdout angibt, weshalb, wann ein Fehler auftritt, sehen wir die Meldung auf dem Bildschirm.

Angenommen, Sie müssen Fehler in der Protokolldatei oder irgendwo anders umleiten, anstatt sie auf dem Bildschirm anzuzeigen.

▍ Fehlerstrom ausführen

Wie bereits wissen, ist der stderr-Datei-Deskriptor - 2. Wir können Fehler umleiten, indem wir diesen Deskriptor vor dem Umleitungsbefehl setzen:

LS -L XFILE 2\u003e MYFILE CAT ./MYFILE
Eine Fehlermeldung fällt jetzt in die MyFile-Datei ein.


Dateifehlerumleitung.

▍ Fehlern und Ausgabeströme ausführen

Beim Schreiben der Befehlszeilenszenarien kann es eine Situation geben, in der Sie Fehlermeldungen organisieren und umleiten müssen, und die Standardausgabe umleiten. Um dies zu erreichen, müssen Sie Umleitungsbefehle für die entsprechenden Deskriptoren mit den Dateien verwenden, in denen Fehler fallen sollen, und Standardausgabe:

LS -L MyFile XFile Anderefile 2\u003e ErrorContent 1\u003e Reichwortcontent

Umleitung von Fehlern und Standardausgang

Die Shell-Umleitung, dass der LS-Befehl aufgrund des Designs von 1\u003e normalerweise an die richtige Datei an die richtige Datei gesendet wird. Fehlermeldungen, die in stderr sein würden, befinden sich aufgrund des Umleitungsbefehls 2 in der fehlerkontierenden Datei in der Fehlercontent-Datei.

Falls erforderlich, können stderr und stdout mit dem Befehl &\u003e in dieselbe Datei umgeleitet werden:


Stderr- und stdout-Umleitung in dieselbe Datei

Nach der Ausführung des Befehls ist das für stderr und stdout in der Inhaltsdatei vorgesehen.

Umleitung der Ausgabe in Skripts

Es gibt zwei Methoden zur Weiterleitung von Ausgang in Befehlszeilenskripts:
  • Temporäre Umleitung oder Umleitung der Leistung einer Zeile.
  • Permanente Umleitung oder Umleitung der gesamten Ausgabe in einem Skript oder in einem Teil davon.

▍ reparierte Umleitung der Leistung

Im Skript können Sie den Ausgang der einzelnen Saite in stderr umleiten. Um dies zu tun, reicht es aus, den Befehl umleiten, indem Sie den Stderr-Deskriptor angeben, während er vor der Deskriptor-Nummer erforderlich ist, um das Ampersand-Symbol (&) zu setzen (&):

#! / bin / bash Echo "Dies ist ein Fehler"\u003e & 2 Echo "Dies ist normaler Ausgabe"
Wenn Sie das Skript starten, fallen beide Zeilen auf den Bildschirm, da, wie Sie wissen, wie bereits wissen, der Standardfehler dort angezeigt wird, wo und die üblichen Daten.


Temporäre Umleitung

Starten Sie das Skript, damit der STDERR-Ausgang in die Datei fällt.

./Myscript 2\u003e myfile
Wie zu sehen ist, erfolgt nun die übliche Ausgabe in der Konsole, und Fehlermeldungen fallen in die Datei.


Fehlermeldungen werden in der Datei geschrieben

▍ Konstante Umleitung der Leistung

Wenn Sie viele Daten aus dem Skript umleiten müssen, fügen Sie jedem Echo-Anruf den entsprechenden Befehl hinzu. Stattdessen können Sie die Ausgabeumleitung an einem bestimmten Deskriptor an der Ausführungszeit des Skripts mit dem Befehl EXEC einstellen:

#! / Bin / bash exec 1\u003e Outfile Echo "Dies ist ein Test der Umleitung aller Ausgabe" Echo "von einem Shell-Skript in eine andere Datei." Echo ", ohne jede Zeile umleiten zu müssen"
Starten Sie das Skript.


Umleitung der gesamten Ausgabe an die Datei

Wenn Sie die im Ausgangsumleitungsteam angegebene Datei anzeigen, stellt sich heraus, dass alles, was von den Echo-Befehlen angezeigt wurde, diese Datei traf.

EXEC-Befehl kann nicht nur zu Beginn des Skripts verwendet werden, sondern auch an anderen Orten:

#! / Bash Exec 2\u003e MyError Echo "Dies ist der Start des Skripts" Echo ", das jetzt alle Ausgaben an einem anderen Ort" EXEC 1\u003e MyFile Echo "umlädt MyError-Datei "\u003e & 2
Das ist, was passiert, nachdem Sie das Skript starten und die Dateien anzeigen, in denen wir die Ausgabe umgelenkt haben.


Ausgabeumleitung auf verschiedene Dateien

Zunächst legt der Befehl EXEC-Befehl die Ausgabeumleitung von der stderr in die MyError-Datei ein. Dann werden mehrere Echobefehle ausgeben, um an stdout zugesandt und auf dem Bildschirm angezeigt. Danach legt der Befehl EXEC das Senden dessen ein, was in stdout in die MyFile-Datei fällt, und schließlich verwenden wir den Befehl Redirect in Stderr im Echo-Befehl, der zur Aufzeichnung der entsprechenden Zeichenfolge in die MyError-Datei führt.

Nachdem Sie dies beherrscht haben, können Sie die Ausgabe umleiten, wo sie erforderlich ist. Lassen Sie uns nun über das Umleiten von Input sprechen.

Eingabe in Skripts umleiten

Um den Eingang umleiten, können Sie dieselbe Technik verwenden, mit der wir die Ausgabe neu leiten. Mit dem Befehl EXEC können Sie beispielsweise eine Datenquelle für stdin einiger Datei erstellen:

EXEC 0.< myfile
Dieser Befehl zeigt die Schale darauf hin, dass die Quelle der Eingabedaten die MyFile-Datei sein sollte, und nicht das übliche STDIN. Schauen wir uns die Eingangsumleitung in Aktion an:

#! / Bin / bash exec 0< testfile count=1 while read line do echo "Line #$count: $line" count=$(($count + 1)) done
Dies erscheint nach dem Start des Skripts auf dem Bildschirm.


Input umleiten.

In einem der vorherigen Materialien haben Sie gelernt, wie Sie den Lesebefehl verwenden, um die vom Benutzer von der Tastatur eingegebenen Daten zu lesen. Wenn Sie den Eingang durch Erstellen einer Datenquelle umleiten, wird der Befehl lesbar, wenn Sie versuchen, die Daten von STDIN zu lesen, aus der Datei aus der Datei und nicht von der Tastatur.

Einige Linux-Administratoren verwenden diesen Ansatz zum Lesen und nachfolgenden Verarbeitungsprotokolldateien.

Erstellen Sie Ihre eigene Umleitung

Umleiten von Ein- und Ausgang in Skripts, Sie sind nicht auf drei Standard-Datei-Deskriptoren beschränkt. Wie bereits erwähnt, können Sie bis zu neun offene Deskriptoren haben. Die restlichen sechs mit Zahlen von 3 bis 8 können verwendet werden, um Eingabe oder Ausgabe umzuleiten. Jeder von ihnen kann der Datei zugewiesen werden und im Skriptcode verwenden.

Weisen Sie den Ausgabedaten mit dem Befehl EXEC ein Handle aus:

#! / Bin / Bash Exec 3\u003e MyFile Echo "Dies sollte auf dem Bildschirm" Echo "angezeigt werden, und dies sollte in der Datei"\u003e & 3 Echo "gespeichert werden, und dieser Shold ist wieder auf dem Bildschirm
Nach dem Starten des Skripts befindet sich der Ausgangsteil des Ausgangs auf dem Bildschirm, der Teil ist in einer Datei mit einem Deskriptor 3.


Ausgabeumleitung mit eigenem Deskriptor

Erstellen von Dateihandlern für die Dateneingabe

Sie können den Eintrag in dem Skript auf dieselbe Weise wie die Ausgabe umleiten. Speichern Sie das STDIN in einem anderen Deskriptor, bevor Sie den Dateneintrag umleiten.

Nachdem Sie die Dateilese lesen, können Sie stdin wiederherstellen und wie üblich verwenden:

#! / Bin / bash exec 6<&0 exec 0< myfile count=1 while read line do echo "Line #$count: $line" count=$(($count + 1)) done exec 0<&6 read -p "Are you done now? " answer case $answer in y) echo "Goodbye";; n) echo "Sorry, this is the end.";; esac
Wir werden das Skript testen.


Input umleiten.

In diesem Beispiel wurde der Dateigriff 6 verwendet, um die Stdin-Referenz zu speichern. Dann wurde die Eingangsumleitung durchgeführt, die Datenquelle für STDIN wurde zur Datei. Danach kamen die Eingabedaten für den gelesenen Befehl aus dem umgeleiteten stdin, dh aus der Datei.

Nachdem wir die Datei gelesen haben, geben wir stdin in den ursprünglichen Zustand zurück und leiten ihn an den Deskriptor 6 um. Um zu überprüfen, ob alles ordnungsgemäß funktioniert, setzt das Skript den Benutzer eine Frage ein, wartet die Eingabe von der Tastatur und verarbeitet, was eingegeben wird.

File-Deskriptoren schließen.

Die Shell schließt automatisch Dateibeschreibungen, nachdem das Skript abgeschlossen ist. In einigen Fällen ist es jedoch notwendig, die Deskriptoren manuell zu schließen, bevor das Skript abgeschlossen ist. Um den Deskriptor zu schließen, muss es an & - umgeleitet werden. Es sieht aus wie das:

#! / Bin / bash Exec 3\u003e MyFile Echo "Dies ist eine Testlinie von Daten"\u003e & 3 Exec 3\u003e & - Echo "Dieser gewonnene" T-Arbeit "\u003e & 3
Nach der Ausführung des Skripts erhalten wir eine Fehlermeldung.


Versuch, einen geschlossenen Dateikriptor anzurufen

Die Sache ist, dass wir versucht haben, einen nicht vorhandenen Deskriptor zu kontaktieren.

Seien Sie vorsichtig, schließen Sie Dateibeschreibungen in Skripts. Wenn Sie Daten in eine Datei gesendet haben, wird der Deskriptor geschlossen, dann eröffnet sie erneut, dass die Hülle die vorhandene Datei mit dem neuen ersetzt. Das heißt, alles, was in dieser Datei früher aufgenommen wurde, wird verloren gehen.

Informationen zu offenen Deskriptoren erhalten

Um eine Liste aller in Linux geöffneten Deskriptoren zu erhalten, können Sie den Befehl LSOF verwenden. In vielen Distributionen ist der LSOF-Dienstprogramm wie Fedora in / usr / sbin. Dieser Befehl ist sehr nützlich, da er Informationen über jeden Deskriptor anzeigt, der im System offen ist. Dies beinhaltet, was die im Hintergrund ausgeführten Prozesse öffnete und was von den Benutzern geöffnet ist, die in das System eintreten.

Dieses Team hat viele Schlüssel, berücksichtigen am wichtigsten.

  • -P Ermöglicht das Angeben der Prozess-ID.
  • -D ermöglicht es Ihnen, die Nummer des Deskriptors anzugeben, das Sie benötigen, um Informationen zu erhalten.
Um die PID des aktuellen Prozesses herauszufinden, können Sie eine spezielle Umgebungsvariable $$ verwenden, in die die Shell die aktuelle PID aufzeichnet.

Der Schlüssel wird verwendet, um den Betrieb des logischen und oberhalb der Ergebnisse durchzuführen, die durch die Verwendung von zwei anderen Tasten zurückgegeben wurden:

LSOF -A -P $$ -D 0,1,2

Fazit von Informationen über offene Deskriptoren

Die Art der Dateien, die mit STDIN, STDOUT und STDERR - CHR verbunden sind, (Zeichenmodus, Zeichenmodus). Da sie alle auf das Terminal zeigen, entspricht der Dateiname dem dem Terminal zugewiesenen Gerätenamen. Alle drei Standarddateien sind auch zum Lesen und Schreiben verfügbar.

Schauen wir uns den Anruf des LSOF-Befehls aus dem Skript an, in dem zusätzlich zum Standard, andere Deskriptoren geöffnet sind:

#! / Bin / Bash Exec 3\u003e myFile1 Exec 6\u003e myFile2 Exec 7< myfile3 lsof -a -p $$ -d 0,1,2,3,6,7
Dies passiert, wenn dieses Skript ausgeführt wird.


Datei-Deskriptoren anzeigen nach Skript geöffnet

Das Skript öffnete zwei Handler für den Ausgang (3 und 6) und eine - für den Eingang (7). Sie sind sofort gezeigt, und Wege zu Dateien, die zur Konfiguration von Deskriptoren verwendet werden.

Unterdrückung

Manchmal ist es notwendig, Befehle in einem Skript zu erstellen, das zum Beispiel als Hintergrundprozess ausgeführt werden kann, nichts wurde angezeigt. Dazu können Sie den Ausgang an / dev / null umleiten. Dies ist so etwas wie ein "schwarzes Loch".

So, wie zum Beispiel Fehlermeldungen unterdrückt:

Ls-aser Badfile ein anderes File 2\u003e / dev / null
Derselbe Ansatz wird verwendet, wenn Sie beispielsweise die Datei löschen müssen, ohne sie zu löschen:

Katze / dev / null\u003e myfile

ERGEBNISSE

Heute haben Sie gelernt, wie in den Befehlszeilenszenarien arbeiten und ausgegeben werden. Jetzt wissen Sie, wie Sie Dateibeschreibungen mit File-Deskriptoren umgehen, erstellen, ansehen und schließen, wissen Sie, wie Sie die Eingabeflüsse, Ausgabe und Fehler umleiten. All dies ist sehr wichtig bei der Entwicklung von Bash-Skripts.

Nächstes Mal sprechen wir über Linux-Signale, wie Sie mit ihnen in Szenarien umgehen, auf dem Start von Aufgaben auf dem Zeitplan und auf Hintergrundaufgaben.

Liebe Leser! Dieses Material ist die Grundlage für das Arbeiten mit Ein-, Ausgangs- und Fehlerströmen angegeben. Wir sind sicher unter Ihnen, es gibt Profis, die über alles erzählen können, was nur mit Erfahrung kommt. Wenn ja - wir geben das Wort an Sie weiter.

Sehr oft, wenn im Terminal arbeiten, müssen Sie das Ergebnis des Betriebs der Befehle (oder jeder Konsolenanwendung) in eine Textdatei speichern oder einfach das Protokoll angeben. In Linux gibt es viele Möglichkeiten, diese Idee umzusetzen, und in diesem Artikel werden wir uns einige von ihnen ansehen.

Standarddatenausgabestrom ( Studout) - Dies ist alle Informationen, die als Ergebnis der Ausführung des Befehls mit Ausnahme von Fehlern angezeigt werden.
Standard-Fehlerausgangsstrom ( Stderr.) - Dies ist ein Fehlerinformationen, wenn es war.


Team\u003e logfile.txt.

Der Standard-Datenausgabestrom (stdout) wird in die Datei umgeleitet und in dem Terminal angezeigt. Wenn die Datei bereits vorhanden ist, wird es angezeigt Überschrieben.

Team \u003e\u003e logfile.txt.

Der Standard-Datenausgabestrom (stdout) wird in die Datei umgeleitet und in dem Terminal angezeigt. Wenn die Datei bereits vorhanden ist, werden neue Daten angezeigt zum Ende der Datei hinzugefügt.

Team 2\u003e logfile.txt

Der Standardfehlerausgabestrom (stderr) wird in die Datei umgeleitet und im Terminal erscheint nicht. Wenn die Datei bereits vorhanden ist, wird es angezeigt Überschrieben.

Team 2 \u003e\u003e logfile.txt

Der Standardfehlerausgabestrom (stderr) wird in die Datei umgeleitet und im Terminal erscheint nicht. Wenn die Datei bereits vorhanden ist, werden neue Daten angezeigt zum Ende der Datei hinzugefügt.

Team &\u003e logfile.txt

Der Standard-Datenausgangsstrom (STDOUT) und der Standard-Fehlerausgangsstrom (stderr) werden in die Datei umgeleitet und nicht im Terminal angezeigt. Wenn die Datei bereits vorhanden ist, wird es angezeigt Überschrieben.

Team & \u003e\u003e logfile.txt

Der Standard-Datenausgangsstrom (STDOUT) und der Standard-Fehlerausgangsstrom (stderr) werden in die Datei umgeleitet und nicht im Terminal angezeigt. Wenn die Datei bereits vorhanden ist, werden neue Daten angezeigt zum Ende der Datei hinzugefügt.

Team | Tee logfile.txt.

Der Standard-Datenausgabestrom (STDOUT) wird in die Datei umgeleitet und wird gleichzeitig im Terminal angezeigt. Wenn die Datei bereits vorhanden ist, wird es angezeigt Überschrieben.

Team | Tee -a logfile.txt.

Der Standard-Datenausgabestrom (STDOUT) wird in die Datei umgeleitet und wird gleichzeitig im Terminal angezeigt. Wenn die Datei bereits vorhanden ist, werden neue Daten angezeigt zum Ende der Datei hinzugefügt.

Beispiele

Unser -R\u003e logfile.txt

Die Ausgabe wird in logfile.txt im aktuellen Verzeichnis gespeichert. Auf dem Bildschirm wird nichts nicht angezeigt.

Unser -R | Tee logfile.txt.

Die Ausgabe wird in logfile.txt im aktuellen Verzeichnis gespeichert. Und das Ergebnis wird angezeigt.



Mit der Neuzuweisung von E / A-Geräten kann ein Programm seine Ausgabe an den Eingang eines anderen senden oder die Ausgabe eines anderen Programms mitnehmen, das ihn als Intendaten verwenden. Somit ist es möglich, Informationen aus dem Prozess mit minimalen Programmkosten zu übertragen. Fast dies bedeutet, dass für Programme, die Standardeingabe- und Ausgabegeräte verwenden, das Betriebssystem ermöglicht:

  • anzeigen von Programmen nicht auf dem Bildschirm (Standardausgabestrom), jedoch in einer Datei oder einem Drucker (Ausgabeumleitung);
  • lesen Die Eingabedaten erfolgt nicht von der Tastatur (Standardeingabestrom), jedoch aus einer vorbestimmten Datei (Eingangsumleitung);
  • senden Sie Nachrichten, die von einem Programm als Eingabe für ein anderes Programm angezeigt werden (Förder- oder Teamzusammensetzung).

Von der Befehlszeile werden diese Funktionen wie folgt implementiert. Um Textnachrichten umzuleiten, werden von jeder Befehlszeile von der Befehlszeile angezeigt, müssen Sie das Design verwenden befehl\u003e Dateiname. Wenn die für die Ausgabe angegebene Datei bereits vorhanden ist, wird es überschrieben (der alte Inhalt geht verloren), falls dies nicht vorhanden ist. Sie können auch keine Datei erneut erstellen und Informationen zum Befehl hinzufügen, der dem Ende einer vorhandenen Datei angezeigt wird. Dazu muss der Umleitungsbefehl wie folgt eingestellt werden: team \u003e\u003e Dateiname. Mit dem Symbol< можно прочитать входные данные для заданной команды не с клавиатуры, а из определенного (заранее подготовленного) файла: команда < имя_файла

Beispiele für E / A-Umleitungs- / Befehlsaufforderung

Wir geben mehrere Beispiele für die Umleitung von E / A.

1. Schlussfolgerung der Ergebnisse ping-Teams. einordnen. Ping ya.ru\u003e ping.txt

2. Referenztext hinzufügen für xcopy-Befehle in copy.txt-Datei: Xcopy /? \u003e\u003e copy.txt.

Wenn Sie eine Fehlermeldung benötigen (Standard-Fehlerstrom), können Sie in diesem Fall mit dem Dateinamen des Befehls 2\u003e in die Textdatei umleiten. In diesem Fall erfolgt der Standardausgang auf dem Bildschirm. Es gibt auch die Fähigkeit, Informationen und Fehlermeldungen in derselben Datei anzuzeigen. Dies geschieht wie folgt: Team\u003e Dateiname 2\u003e & 1

In dem Befehl unten wird beispielsweise der Standardausgabestrom und der Standard-Fehlerstrom in die Datei copy.txt umgeleitet: Xcopy A: \\ 1.Txt C:\u003e copy.txt 2\u003e & 1

Die integrierten Umleitungsfunktionen in Linux bieten Ihnen ein breites Spektrum an Tools, mit dem Sie alle Arten von Aufgaben vereinfachen können. Die Fähigkeit, verschiedene E / A-Streams zu verwalten, steigert die Produktivität erheblich, sowohl bei der Entwicklung komplexer Software als auch beim Verwalten von Dateien mit der Befehlszeile.

E / A-Streams

Enter und Ausgabe, die von Linux umgeben ist, ist zwischen drei Threads verteilt:

  • Standardeingang (Standardeingabe, stdin, fließnummer 0)
  • Standardausgabe (Standardausgabe, stdout, Nummer 1)
  • Standardfehler oder Diagnosestrom (Standardfehler, stderr, Nummer 2)

Wenn der Benutzer mit dem Terminal interagiert, wird der Standardeingang über die Tastatur des Benutzers übertragen. Standardausgabe und Standardfehler werden auf dem Benutzer-Terminal in Form von Text angezeigt. Alle diese drei Threads werden Standardströme bezeichnet.

Standardeingang

Der Standardeingangsstrom überträgt normalerweise Daten vom Benutzer an das Programm. Programme, die den Standardeingang vorschlagen, empfangen in der Regel Eingabedaten von dem Gerät (z. B. Tastatur). Standardeingabe wird durch Erreichen von EOF (Ende der Datei, Ende der Datei) angehalten. EOf zeigt an, dass keine gelesenen Daten mehr vorhanden sind.

Um zu sehen, wie Standardeingaben funktioniert, führen Sie das CAT-Programm aus. Der Name dieses Werkzeugs bedeutet "CONCATENAT" (Link oder kombinieren Sie alles). In der Regel wird dieses Tool verwendet, um den Inhalt von zwei Dateien zu kombinieren. Beim Start ohne Argumente öffnet CAT die Befehlszeile und übernimmt den Inhalt der Standardeingabe.

Geben Sie nun ein paar Zahlen ein:

1
2
3
Ctrl-d.

Einführung der Nummer und Drücken von ENTER, Sie senden einen Standardeintrag des laufenden CAT-Programms, das diese Daten akzeptiert. Das CAT-Programm zeigt wiederum den resultierenden Eingang in der Standardausgabe an.

Der Benutzer kann den EAf angeben, indem Sie Strg-D drücken, wonach die Katze aufhört.

Standardausgabe

Standardausgabe schreibt Daten, die vom Programm erzeugt werden. Wenn der Standardausgabestrom nicht umgeleitet wurde, wird der Text an das Terminal angezeigt. Versuchen Sie, den folgenden Befehl zum Beispiel auszuführen:

echo wird durch Standardausgabe an das Terminal gesendet

Der Echo-Befehl ohne zusätzliche Optionen zeigt alle an ihn übertragenen Argumente auf dem Bildschirm an.

Jetzt rennen Echo ohne Argumente:

Das Team gibt eine leere Zeichenfolge zurück.

Standart Fehler

Dieser Standardstrom schreibt Fehler, die von dem von dem fehlgeschlagenen Programm erstellt wurden. Wie der Standardausgang sendet dieser Thread Daten an das Terminal.

Betrachten Sie ein Beispiel des LS-Befehlsfehlerstroms. Der LS-Befehl zeigt den Inhalt der Verzeichnisse an.

Ohne Argumente gibt dieser Befehl den Inhalt des aktuellen Verzeichnisses zurück. Wenn Sie einen Katalognamen als Argument ls angeben, gibt der Befehl seine Inhalte zurück.

Da der Katalog% nicht existiert, gibt das Team einen Standardfehler zurück:

ls: Zugriff auf%: Keine solche Datei oder Verzeichnis

Streaming umleiten

Linux bietet spezielle Befehle, um jeden Strom umzuleiten. Diese Befehle schreiben den Standardausgang in die Datei auf. Wenn der Ausgang in eine nicht vorhandene Datei umgeleitet wird, erstellt der Befehl eine neue Datei mit demselben Namen und behält den umgelenkten Ausgang ein.

Befehle mit einer Eckbügelrechnung schreibt den vorhandenen Inhalt der Zieldatei neu:

  • \u003e - Standard-Schlussfolgerung
  • < — стандартный ввод
  • 2\u003e - Standardfehler

Befehle mit doppelten Winkelklammern schreibt den Inhalt der Zieldatei nicht neu:

  • \u003e\u003e - Standard-Schlussfolgerung
  • << — стандартный ввод
  • 2 \u003e\u003e - Standardfehler

Betrachten Sie das folgende Beispiel:

cat\u003e write_to_me.txt.
EIN.
B.
C.
Ctrl-d.

In diesem Beispiel wird der CAT-Befehl verwendet, um den Ausgang in die Datei aufzunehmen.

Schauen Sie sich den Inhalt von write_to_me.txt an:

cat write_to_me.txt.

Das Team muss zurückkehren:

Umleiten Sie die CAT in die Datei Write_to_me.txt und geben Sie drei Ziffern ein.

cat\u003e write_to_me.txt.
1
2
3
Ctrl-d.

Überprüfen Sie nun den Inhalt der Datei.

cat write_to_me.txt.

Das Team muss zurückkehren:

Wie Sie sehen, enthält die Datei nur den letzten Ausgang, da eine Winkelhalterung in der ausgeführten Befehle verwendet wurde.

Versuchen Sie nun, den gleichen Befehl mit zwei Winkelklammern auszuführen:

cat \u003e\u003e write_to_me.txt.
EIN.
B.
C.
Ctrl-d.

Open Write_to_me.txt:

1
2
3
EIN.
B.
C.

Befehle mit doppelten Winkelklammern überschreiben den vorhandenen Inhalt nicht und ergänzen sie.

Förderer

Förderer (Rohre) leiten die Ausgangsströme eines Befehls mit dem Eingang eines anderen um. Gleichzeitig werden die vom zweiten Programm übertragenen Daten nicht im Terminal angezeigt. Auf dem Bildschirm werden die Daten nur nach der Verarbeitung des zweiten Programms angezeigt.

Förderer in Linux werden durch ein vertikales Merkmal dargestellt.

Beispielsweise:

Ein solcher Befehl sendet das LS-Ausgang (Inhaltsstromverzeichnis) weniger Programm, das die an diese Zeile übertragenen Daten anzeigt. In der Regel zeigt LS den Inhalt der Kataloge in Folge an, ohne die Zeichenfolge zu brechen. Wenn Sie den LS-Ausgang an den weniger leiten, trennen der letzte Befehl den Ausgang an den Saiten.

Wie Sie sehen, kann der Förderer die Ausgabe eines Befehls mit einem Befehl an den Eingang eines anderen, anders als als\u003e und \u003e\u003e umleiten, welche Daten nur auf Dateien umleiten.

Filter

Filter sind Befehle, die die Umleitung und die Ausgabe des Förderers ändern können.

Hinweis: Filter sind auch Standard-Linux-Befehle, die ohne Förderer verwendet werden können.

  • finden - Suchdateien mit Name.
  • grep - sucht Text auf einer bestimmten Vorlage.
  • abschlag - Redibriert den Standardeingang auf Standardausgabe und eine oder mehrere Dateien.
  • tR - Suchen und Ersetzen von Saiten.
  • wC - Zählen Sie Zeichen, Reihen und Wörter.

Beispiele für E / A-Reduzierungen

Nachdem Sie sich mit den grundlegenden Konzepten und Mechanismen der Umleitung vertraut gemacht haben, berücksichtigen Sie mehrere grundlegende Beispiele ihrer Verwendung.

team\u003e Datei.

Eine solche Vorlage leitet die Standardausgabe des Befehls in die Datei um.

ls ~\u003e root_dir_contents.txt

Dieser Befehl vermittelt den Inhalt der Wurzel des Systemverzeichnisses als Standardausgabe und schreibt die Ausgabe an die root_dir_content-Datei. Dadurch wird alle vorherigen Inhalte in der Datei gelöscht, da in dem Befehl eine Winkelhalterung verwendet wird.

team\u003e / dev / null

/ Dev / null ist eine spezielle Datei (das sogenannte "leere Gerät"), mit dem der Standard-Ausgangsstrom oder die Diagnose unterdrückt wird, um den unerwünschten Ausgang in die Konsole zu vermeiden. Alle Daten, die in / dev / null fallen, werden zurückgesetzt. In den Shell-Szenarien wird normalerweise Umleitung zu / dev / null verwendet.

ls\u003e / dev / null

Ein solcher Befehl setzt den Standardausgangsthread zurück, der vom LS-Befehl zurückgegeben wird, indem er an / dev / null angibt.

team 2\u003e Datei

Diese Vorlage leitet den Standard-Befehlsfehlerstrom-Stream in einer Datei um und überschreibt seinen aktuellen Inhalt.

mkdir "" 2\u003e mkdir_log.txt

Dieser Befehl leitet einen Fehler um, der durch den falschen Katalognamen verursacht wird, und nimmt sie in log.txt auf. Hinweis: Der Fehler wird immer noch im Terminal angezeigt.

befehl \u003e\u003e Datei.

Diese Vorlage leitet den Standard-Befehlsausgang in einer Datei um, ohne den aktuellen Inhaltsgehalt umzuschreiben.

echo in eine neue Datei geschrieben\u003e Data.txt
ECHO an einen vorhandenen Dateien inhalt \u003e\u003e data.txt angehängt

Diese Pair-Befehle leitet zunächst den vom Benutzer eingegebenen Text in eine neue Datei um und fügt ihn anschließend in eine vorhandene Datei ein, ohne den Inhalt umzuschrieben.

team 2 \u003e\u003e Datei

Diese Vorlage leitet einen Standard-Befehlsfehlerstrom in einer Datei um, ohne den vorhandenen Dateiinhalt zu überschreiben. Es eignet sich zum Erstellen von Protokollprotokollen oder -dienstleistungen, da der Protokollinhalt nicht ständig aktualisiert wird.

finde "" 2\u003e stderr_log.txt
WC "" 2 \u003e\u003e stderr_log.txt

Der obige Befehl leitet eine Fehlermeldung um, die durch das falsche Fund-Argument in der Datei stderr_log.txt verursacht wird, und fügt ihm dann eine Fehlermeldung hinzu, die durch ungültiges WC-Argument verursacht wird.

team | Mannschaft

Diese Vorlage leitet den Standard-Befehlsausgang des Standards an den Standardeingang des zweiten Befehls um.

fIND / VAR LIB | Grepr Deb.

Dieser Befehl sucht im Verzeichnis / var und seinen Unterverzeichnissen Dateinamen und Erweiterungen deb und gibt Pfade auf Dateien zurück, indem Sie die Suchvorlage in Rot hervorheben.

team | Tee-Datei.

Eine solche Vorlage leitet die Standardausgabe des Befehls in die Datei um und schreibt seinen Inhalt neu und zeigt dann den umgeleiteten Ausgang in dem Terminal an. Wenn die angegebene Datei nicht vorhanden ist, erstellt es eine neue Datei.

In dieser Vorlage wird der Abschlagsbefehl normalerweise zum Anzeigen der Ausgabe des Programms verwendet und gleichzeitig in der Datei gespeichert.

wC / etc / magic | Tee magic_count.txt.

Ein solcher Befehl überträgt die Anzahl der Zeichen, Zeilen und Wörter in der Magic-Datei (Linux verwendet es, um Dateitypen zu ermitteln) TEE-Befehl, der diese Daten an das Terminal und die Datei Magic_count.txt sendet.

team | Team | Befehl \u003e\u003e Datei.

Diese Vorlage leitet den Standardausgang des ersten Befehls um und filtert ihn über die folgenden beiden Befehle und fügt dann das Endergebnis der Datei hinzu.

ls ~ | Grep * Teer | TR E E\u003e ls_log.txt

Dieser Befehl sendet den LS-Ausgang für das Root-Directory-Team Grep. GREP sucht wiederum Tar-Dateien in den empfangenen Daten. Danach wird das Ergebnis des GREP an den TR-Befehl übertragen, der alle Zeichen E ersetzt, die mit E. Das Ergebnis wird der Datei ls_log.txt hinzugefügt (wenn eine solche Datei nicht vorhanden ist, erstellt der Befehl es automatisch).

Fazit

Die Linux-E / A-Umleitungsfunktionen erscheinen zu kompliziert. Die Arbeit mit der Umleitung ist jedoch eine der wichtigsten Fähigkeiten des Systemadministrators.

Um mehr über jedes Team zu erfahren, verwenden Sie:

mann Kommando | Weniger

Beispielsweise:

Ein solcher Befehl gibt eine vollständige Liste der Befehle zum T-Stück zurück.

Stichworte:
Fortsetzung des Themas:
Netzwerk

Der Online-Shop Biggeek war schon seit langem einer der Führungskräfte des Verkaufs von Mobilgeräten und Gadgets. Auch angesammelte Erfahrungen mit Kunden erlaubten ihnen, ein gemeinsames ...