„tee” dla poleceń

15

teemoże przekierować standardowe wejście w potoku do standardowego wyjścia i pliku.

echo Hello, World! | tee greeting.txt

Powyższe polecenie wyświetli powitanie na ekranie terminala i zapisze je w zawartości greeting.txtpliku, tworząc plik, jeśli nie ma takiego przy tej nazwie.

Istnieje również -aopcja, teeaby dołączyć do istniejącego pliku zamiast nadpisywania.


Czy istnieje wygodny sposób przekierowania potoku wejściowego do polecenia i standardowego wyjścia zamiast pliku?

Usiłuję utworzyć skrypt opakowania, bukuaby skopiować do podstawowego wyboru adres URL zakładki określony przez jego numer indeksu.

# bukuc:
#!/bin/sh
url=$(buku -f 1 -p $1 | cut -f 2) # NUMBER : URL
echo $url # DISPLAY
echo $url | xsel # PRIMARY SELECTION

Tutaj używam echo dwa razy, najpierw do wyświetlenia na terminalu, a następnie do zapisania w podstawowym wyborze (schowku).

Wyobrażam sobie coś echo $url | teeC xsellub skrót do wyświetlenia wyniku przed przekazaniem do następnego polecenia (polecenia łańcuchowe), co pozwoliłoby mi na połączenie całego polecenia w jednym wierszu bez konieczności zapisywania wyniku w zmiennej w następujący sposób:

buku -f 1 -p $1 | cut -f 2 | teeC xsel    

Mogę go również używać urlviewdo przeglądania, wybierania i otwierania w $BROWSERnastępujący sposób:

bukuc 10-20 | urlview

źródło
3
Spróbuj tee /dev/ttylub tty0(nie pamiętam dokładnie ... jestem w drodze)
George Vasiliou,
2
info teewspomina o podstawieniu procesu i wyjściu trójnika do programu ...
Xen2050,

Odpowiedzi:

19

Jest prosty w powłokach, które obsługują podstawianie procesów , np. Bash

$ echo foo | tee >(xsel)
foo
$ xsel -o
foo

W przeciwnym razie możesz użyć FIFO (chociaż nie ma wygody)

$ mkfifo _myfifo
$ xsel < _myfifo &
$ echo bar | tee _myfifo
bar
$ xsel -o
bar
[1] + Done                       xsel 0<_myfifo
$ 
steeldriver
źródło
Dzięki! Zauważyłem dwie rzeczy: 1. sh(powłoka Bourne'a) nie obsługuje tej funkcji; 2. Strzała musi trzymać się jako część jednego operatora w >()celu zastąpienia procesu.
11

Bezpośrednim analogiem „tee for peecommand ” jest polecenie z moreutils ( teeale z potokami ). Jego argumenty są używane jako polecenia do uruchomienia, a nie jako ścieżki, i pobierają do nich dane wejściowe, a nie zapisywane do pliku. Wszystkie polecenia mają standardowe wejście, do którego potokowałeś peejako własne.

Korzystanie peemożna uzyskać wynik chciałeś informując go uruchomić zarówno xseli catprzy wejściu.

echo foo | pee xsel cat

Pływa tam dodatkowy catproces, aby wykonać dane wyjściowe, co nie jest tak naprawdę problemem dla twojego przypadku użycia, ale może być mniej idealne w innych przypadkach. Działa to z dowolną powłoką, w przeciwieństwie do zastępowania procesów, ale oczywiście wymaga zainstalowania dodatkowego (prawdopodobnie mniej powszechnego) narzędzia.

Możesz podać więcej skomplikowanych poleceń poprzez ich cytowanie: pee "xsel --display :1" cat. Są uruchamiane sh, więc musisz uważać na metaznaki powłoki.

Michael Homer
źródło
4
Bardzo fajnie - nie wiedziałem o tym
steeldriver
2
To ... niezbyt dobre imię.
David Richerby,