Ein Befehl, der sowohl Standardfehler als auch Ausgabe generiert

7

Ich möchte eine Fehlerbehebung für mein Bash-Skript durchführen. Gibt es einen kurzen und einfachen Befehl, der beide generiert stdoutund den stderrich verwenden kann 2>&1? Tut mir leid, wenn das trivial aussieht, aber ich kann mir im Moment einfach keinen vorstellen.

Fragenüberlauf
quelle
1
ls . *blah(Vorausgesetzt, Sie haben einige sichtbare Dateien im aktuellen Verzeichnis und keine, die auf endet blah) ...
Jasonwryan
@ Jasonwryan, großartig! Das funktioniert. Würde es Ihnen etwas ausmachen, es als Antwort niederzulegen?
Frage Überlauf

Antworten:

7

Ein einfacher Ansatz wäre die lsAuflistung tatsächlicher und imaginärer Dateien:

ls . *.blah

Dies setzt voraus , dass es sind sichtbare Dateien im Arbeitsverzeichnis , und dass Sie nicht haben , alle Dateien , die Ende in .blah1


1. ... und wenn Sie das tun, werden wir Sie nicht beurteilen.

Jasonwryan
quelle
1
Das funktioniert nicht in zsh, fish, csh, tcsh und bash -O failglob. (und ls .kann auf stdout nichts zurückgeben, wenn das aktuelle Verzeichnis nur versteckte Dateien / Verzeichnisse enthält). Besserls / /x
Stéphane Chazelas
6

Schreiben Sie einfach eine Subshell, die an stdoutund stderr...

(echo STDOUT && echo STDERR >&2) 

Zum Beweis, dass es funktioniert:

(echo STDOUT && echo STDERR >&2) > STDOUT.txt 2> STDERR.txt

Dies wird Dateien erstellen STDOUT.txtund STDERR.txtdie Worte STDOUTund STDERRjeweils.

Ben
quelle
2
ls / /x
df / /x
wc / /etc/passwd
od / /dev/null

Um garantiert stdout vor stderr geschrieben:

(w;/) # Bourne/csh like shells only.
sh -c 'w;/'
'time' w
Stéphane Chazelas
quelle
1

Sie können eine Funktion schreiben, die Sie später verwenden können:

gen_stdout_stderr() {                                                           
    printf "%s\n" "STDERR" >&2                                                  
    printf "%s\n" "STDOUT"                                                      
}

Dann:

$ gen_stdout_stderr 
STDERR
STDOUT
cuonglm
quelle