Zastanawiałem się, czy istnieje sposób na przesłanie wyniku polecenia i skierowanie go do standardowego wyjścia. Na przykład fortune
drukuje plik cookie fortuny, a także kopiuje go do schowka:
$ fortune | tee >(?stdout?) | pbcopy
"...Unix, MS-DOS, and Windows NT (also known as the Good, the Bad, and
the Ugly)."
(By Matt Welsh)
fortune | tee $(tty) | pbcopy
?Odpowiedzi:
Twoje założenie:
nie będzie działać, ponieważ dane
fortune
wyjściowe zostaną zapisane dwa razy na standardowe wyjście, więc podwoisz wynik dopbcopy
.W OSX (i obsłudze innych systemów
/dev/std{out,err,in}
) możesz to sprawdzić:wypisuje
2
dwa razy zamiast1
i2
.Musisz użyć innych deskryptorów plików, na przykład standardowego błędu poprzez
/dev/stderr
:lub użyj,
tty
aby uzyskać podłączony pseudo terminal:Dzięki opcji
zsh
imultios
nie potrzebujesztee
wcale:źródło
tee $(tty)
Albo, wiesz,tee /dev/tty
tee
zawsze zapisuje na standardowe wyjście. Jeśli chcesz wysłać dane do polecenia oprócz terminala, do którego już idzie standardowe wyjście, po prostu użyj zastępowania procesu tym poleceniem. (Zauważ, że pomimo rozpoczęcia>
podstawienie procesu nie przekierowuje standardowego wyjścia,tee
polecenie traktuje to jako parametr).źródło
cuonglm powiedział wszystko.
Spróbuj:
tty
powinien rozwiązywać do rzeczywistego pseudo terminala (podobnego/dev/pts/99
) w sesji interaktywnej (tj. w terminalu) lub brak tty wsadowo, w i demona.źródło