Frage zum <> Linux-Umleitungsoperator

1354
Mike B

Ich lerne für meinen LPIC-1 und bin verwirrt vom Umleitungsoperator <>. Ich weiß, dass die offizielle Definition dafür lautet, dass "die angegebene Datei sowohl für die Standardeingabe als auch für die Standardausgabe verwendet wird" ... aber ich bin immer noch verwirrt.

Könnte jemand bitte ein Beispiel geben, wie und wann ich den Umleitungsoperator <> in Linux verwenden würde?

2
Eine gute, aber nur deutschsprachige Erklärung zur Weiterleitung in bash, von der ich weiß, kann hier gefunden werden (http://wiki.ubuntuusers.de/Shell/Umleitungen). nuchoco vor 14 Jahren 0

2 Antworten auf die Frage

4
John T

Ein Beispiel wäre, wenn Sie Programmeingabedaten bereitstellen müssen und die Ausgabedaten auch irgendwo (z. B. eine Datei) senden sollen:

$ sort < data.txt > result.txt 

Dies führt die Daten data.txtdurch den Sortierbefehl und sendet die Ausgabe an result.txt. Es ist identisch damit:

$ sort data.txt > result.txt 

Stell es dir so vor:

(2 <- 1) -> 3 

Die mittlere Datei wird unter Nummer 2 in das Programm eingegeben, und das Ergebnis wird schließlich an 3 gesendet.

Sehr gern geschehen! :) John T vor 15 Jahren 0
I think there is a functional difference between "sort data.txt" and "sort < data.txt". In the former, the utility needs to understand how to open a file in the filesystem and read it. In the later, the utility only needs to understand how to read text from the "standard in", which for an interactive terminal access is commonly the keyboard. I may be wrong. pcapademic vor 15 Jahren 0
3
jmb

Wenn die Antwort von John T das war, was Sie wollten, dann haben Sie die Frage falsch formuliert :)

Er hat die Operatoren <und> kurz beschrieben, aber Sie haben nach <> gefragt. Dies ist ein selten verwendeter Operator, von dem ich nicht überzeugt bin, dass ich ihn in LPIC-1 sehen würde, aber nur für die Aufzeichnung (vorausgesetzt, Sie haben diese Prüfung wahrscheinlich bereits abgeschlossen):

Wenn Sie einen Befehl ohne Umleitung interaktiv ausführen, werden seine Standardeingabe, Ausgabe und Fehler normalerweise an das tty angehängt. es wird von stdin gelesen und in stdout / stderr geschrieben. Obwohl Sie es vielleicht nicht erwarten, werden diese Dateideskriptoren normalerweise mit Lese- und Schreibzugriff geöffnet. Versuchen Sie, ein Skript auszuführen

#!/bin/bash echo "I'm writing to stdin!" >&0 

Das Ausführen dieser Bare funktioniert zumindest in aktuellen Bash- Versionen. Wenn Sie jedoch die Redirektoren <und> verwenden, werden die Dateideskriptoren stdin und stdout nur zum Lesen bzw. Schreiben geöffnet. Wenn Sie dies also mit einer Eingabe aus einer Datei aufrufen -

./write-to-stdin < /tmp/some-input 

es wird nicht funktionieren (vernünftigerweise). Wenn Sie wirklich möchten, dass ein Programm, das Sie mit der Umleitung aufrufen, nur einen einzigen Dateideskriptor schreiben und schreiben kann, erledigt <> die Aufgabe.

./read-and-write-stdin <> /tmp/some-input-and-output ./read-and-write-stdout 1<> /tmp/some-input-and-output 

Da die meisten Programme nur erwarten, dass stdin ein Lesedeskriptor ist und stdout ein Schreibdeskriptor ist, können Sie wahrscheinlich erkennen, warum dies eher selten nützlich ist. Wenn Sie jedoch untergeordnete Skripts schreiben (oder Funktionen verwenden), können Sie das Verhalten nutzen dich selbst.