Leiten Sie stderr in die C-Shell um
Wenn ich führen Sie den folgenden Befehl in csh
habe ich nichts, aber es funktioniert in bash
ist, gibt es einen Gegenwert in csh
die Umleitung der standard-Fehler-standard aus?
somecommand 2>&1
InformationsquelleAutor der Frage zdd | 2012-12-05
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den
csh
shell hat noch nie bekannt für Ihre umfangreiche Möglichkeit zum manipulieren von Datei-handles in der Umleitung Prozess.Leiten Sie sowohl standard output und error in eine Datei mit:
aber das ist nicht ganz das, was Sie nachher waren, Umleitung der standard-Fehler der aktuellen standard-Ausgabe.
Allerdings, wenn Sie Ihre zugrunde liegenden operativen system stellt die standard-Ausgabe eines Prozesses in die Datei system (wie Linux mit
/dev/stdout
), die Sie verwenden können, Verfahren Sie wie folgt vor:Dies zwingt sowohl die standard-Ausgabe und standard Fehler an den gleichen Ort gehen, als die aktuelle standard-Ausgabe, effektiv, was Sie mit der
bash
Umleitung2>&1
.Denken Sie daran, dies ist nicht eine
csh
Funktion. Wenn Sie auf ein Betriebssystem, das nicht aussetzen standard-Ausgabe als Datei, Sie können nicht diese Methode verwenden.Aber es gibt eine andere Methode. Können Sie kombinieren die zwei Flüsse in eins, wenn Sie senden Sie es an einen pipeline mit
|&
dann alles, was Sie tun müssen, ist eine pipeline-Komponente, schreibt seine standard-Eingabe auf seine standard-Ausgabe. Im Falle Sie sind sich nicht bewusst, wie ein Ding, das ist genau das, wascat
tut, wenn Sie nicht geben es keine Argumente. Daher können Sie erreichen Ihre enden in diesem bestimmten Fall mit:Natürlich, es gibt auch nichts stoppen Sie die Ausführung von
bash
(vorausgesetzt, es ist auf dem system irgendwo) innerhalb einecsh
Skript, um Ihnen die zusätzlichen Funktionen. Dann können Sie die reiche Umleitungen, dass shell für die komplexeren Fälle, in denencsh
kämpfen.Laßt uns dieses im detail. Zuerst erstellen Sie eine ausführbare Datei
echo_err
wird eine Zeichenfolge schreiben zustderr
:Dann ein control-Skript
test.csh
werden, die zeigen es in Aktion:Den
echo
von der PID und derps
sind einfach, so dass Sie sicherstellen können, es istcsh
dieses Skript ausgeführt wird. Wenn Sie dieses Skript ausführen mit:(die erste Umleitung ist eingerichtet, von
bash
vorcsh
gestartet, der das Skript ausführt), und untersuchen Sie dieout/err
Dateien, die Sie sehen:Können Sie sehen dort, dass die
test.csh
Prozess ist läuft in der C-shell, und dass der Aufrufbash
innerhalb von es gibt Ihnen die vollebash
macht der Umleitung.Den
2>&1
imbash
Befehl ganz leicht können Sie umleiten von standard-Fehler der aktuellen standard-Ausgabe (wie gewünscht) ohne Vorkenntnisse, wo die standard-Ausgabe ist aktuell Los ist.InformationsquelleAutor der Antwort paxdiablo
Ich-Objekt die obige Antwort und meinen eigenen.
csh
HAT diese Fähigkeit, und hier ist wie es gemacht wird:oder
oder wenn Sie nur wollen, es zu merge-streams (auf stdout) und nicht umleiten in eine Datei oder some_exec:
InformationsquelleAutor der Antwort bioffe
Als paxdiablo gesagt, Sie können
>&
umleiten sowohl stdout und stderr. Allerdings, wenn Sie wollen, dass Sie getrennt werden können Sie die folgenden verwenden:...als den oben angegebenen wird umleiten von stdout zu stdoutfile und stderr zu stderrfile.
InformationsquelleAutor der Antwort Chris
Worüber nur
???
InformationsquelleAutor der Antwort ChPortos
Oder tun dies, um zu sehen alles, was auf dem Bildschirm und gehen Sie zu Ihrer Datei:
InformationsquelleAutor der Antwort Ryan P
Ich denke, das ist die richtige Antwort für csh.
Hinweis: die meisten csh sind wirklich tcsh in modernen Umgebungen:
rmockler>
ls -latr /usr/bin/csh
lrwxrwxrwx 1 root root 9 2011-05-03 13:40 /usr/bin/csh -> /bin/tcsh
mit einem backtick embedded-Anweisung, um dies darzustellen wie folgt:
wenn dies für Sie funktioniert, bitte stoßen bis 1. Die anderen Vorschläge nicht funktionieren, für meine csh-Umgebung.
InformationsquelleAutor der Antwort Rob