tee
kann die weitergeleitete Standardeingabe in die Standardausgabe und -datei umleiten .
echo Hello, World! | tee greeting.txt
Der obige Befehl zeigt die Begrüßung auf dem Terminalbildschirm an und speichert sie im Inhalt der greeting.txt
Datei, wobei die Datei erstellt wird, wenn keine mit diesem Namen vorhanden ist.
Es gibt auch einen -a
Schalter tee
zum Anhängen an die vorhandene Datei, anstatt sie zu überschreiben.
Gibt es eine bequeme Möglichkeit, die weitergeleitete Eingabe an den Befehl und die Standardausgabe anstatt an die Datei umzuleiten ?
Ich versuche, ein Wrapper-Skript zu erstellen, um buku
die URL des durch die Indexnummer angegebenen Lesezeichens in die primäre Auswahl zu kopieren.
# bukuc:
#!/bin/sh
url=$(buku -f 1 -p $1 | cut -f 2) # NUMBER : URL
echo $url # DISPLAY
echo $url | xsel # PRIMARY SELECTION
Hier benutze ich echo
zwei mal, zuerst zum Anzeigen auf dem Terminal, und dann zum Speichern in der primären Auswahl (Zwischenablage).
Ich stelle mir etwas von echo $url | teeC xsel
oder eine Verknüpfung vor, um die Ausgabe anzuzeigen, bevor ich zum nächsten Befehl übergebe (Befehle verketten). Auf diese Weise kann ich den gesamten Befehl in einer Zeile verketten, ohne das Ergebnis wie folgt in einer Variablen speichern zu müssen :
buku -f 1 -p $1 | cut -f 2 | teeC xsel
Ich kann es auch verwenden urlview
, um $BROWSER
Folgendes anzuzeigen, auszuwählen und zu öffnen :
bukuc 10-20 | urlview
tee /dev/tty
odertty0
(nicht genau erinnern ... ich bin auf der Straße)info tee
Erwähnt Prozessersetzung und Ausgabe des Pipe-Tees an ein Programm ...Antworten:
Es ist unkompliziert in Shells, die die Prozessersetzung unterstützen , z. B. Bash
Andernfalls könnten Sie ein FIFO verwenden (obwohl es nicht bequem ist)
quelle
sh
(Bourne-Shell) unterstützt diese Funktion nicht; 2. Der Pfeil muss als Teil des einzelnen Operators>()
für die Prozessersetzung bleiben .Das direkte Analogon von "tee for commands" ist der
pee
Befehl von moreutils (tee
aber mit Pipes). Die Argumente werden als auszuführende Befehle und nicht als Pfade verwendet und die Eingabe wird an sie weitergeleitet, anstatt in eine Datei geschrieben zu werden. Alle Befehle erhalten die Standardeingabe, an die Sie weitergeleitetpee
haben.Mit
pee
können Sie das gewünschte Ergebnis erzielen, indem Sie angeben, dass es sowohl mitxsel
als auchcat
mit der Eingabe ausgeführt werden soll.Es gibt dort einen zusätzlichen
cat
Prozess, der die Ausgabe ausführt, was für Ihren Anwendungsfall kein Problem darstellt, aber zu anderen Zeiten weniger ideal sein könnte. Dies funktioniert mit jeder Shell, im Gegensatz zur Prozessersetzung, aber es ist natürlich ein zusätzliches (wahrscheinlich weniger verbreitetes) Tool erforderlich.Sie können komplexere Befehle geben sie mit einem Zitat:
pee "xsel --display :1" cat
. Sie werden mit ausgeführtsh
, sodass Sie vorsichtig mit Shell-Metazeichen sein müssen.quelle