2017-06-15 3 views
1

ich diese haben in Datei:Echo an stdout und hängen

echo "all done creating tables" >> ${SUMAN_DEBUG_LOG_PATH} 

aber das sollte nur an die Datei anhängen, nicht auf stdout schreiben. Wie kann ich auf stdout schreiben und an eine Datei in der gleichen bash Linie anfügen?

+0

Es stdout schreibt, die die Datei –

+0

hmm ok, ich denke, du hast recht .. wie kann ich pipe stdout an die "Konsole"/aktuelle TTY auch dann? Sie wissen, was ich frage :) –

Antwort

4

So etwas wie das?

echo "all done creating tables" | tee -a "${SUMAN_DEBUG_LOG_PATH}" 
+0

yeah das sieht so aus, als ob es funktioniert - eine Idee, ob das Tee auf so ziemlich jeder * nix Maschine verfügbar ist? scheint auf Macos zu funktionieren. –

+0

Oh ja ... ich denke du wirst es überall finden. Unter Linux ist es ein Teil von coreutils – mauro

+0

[ 'tee'] (http://pubs.opengroup.org/onlinepubs/9699919799/utilities/tee.html) Teil des POSIX-Standard ist. – chepner

2

Verwenden Sie den Befehl tee

$ echo hi | tee -a foo.txt 
hi 
$ cat foo.txt 
hi 
+0

oh Mist, ich habe vergessen zu fragen, wird dies stderr sowohl an die TTY und die Datei senden? –

1

Normalerweise T-Stück verwendet wird, jedoch eine Version nur bash mit:

#!/bin/bash 

function mytee(){ 
    fn=$1 
    shift 
    IFS= read -r LINE 
    printf '%s\n' "$LINE" 
    printf '%s\n' "$LINE" >> "$fn" 
} 


SUMAN_DEBUG_LOG_PATH=/tmp/abc 
echo "all done creating tables" | mytee "${SUMAN_DEBUG_LOG_PATH}" 
+0

Dies ist ein Fall, in dem es nicht wirklich hilft, es in reiner 'bash' zu tun. Sie müssen sowieso einen neuen Prozess für die RHS der Pipe erstellen, so dass Sie in diesem Prozess auch 'tee' anstelle von' bash' ausführen können. – chepner

+0

Das hängt davon ab, wie viel Protokollierung stattfinden wird. Wenn dies viel ist, wird auch eine exec>>() funktionieren, ist aber in der Tat eine zusätzliche Gabelung. Alles hängt davon ab, ob das Tee verfügbar ist oder nicht. tee ist jedoch nicht in der Lage, die Daten vorzuspeichern und zu manipulieren, während dies in bash noch möglich ist. – CowboyTim

+0

@chepner thx für die Verbesserung, aber "$ fn" für Windowsy-Dateinamen erfordert auch Fn = "$ 1" Ich recon? :-) – CowboyTim

Verwandte Themen