Ich entdeckte vor kurzem einige bash
Code, der die wenig bekannte verwendet (na ja, zu mir wenig bekannt sowieso) Merkmal der Funktion Umleitung, wie die stark vereinfacht:Wie können Sie Funktionsumleitung in Bash überschreiben?
function xyzzy() {
echo hello
} >/dev/null
Wenn Sie rufen Sie die Funktion mit ein einfach xyzzy
, wendet es automatisch die an die Funktion angehängten Umleitungen an, unabhängig davon, was Sie beim Aufruf getan haben.
Was ich gerne wissen würde, ist, wenn es eine Möglichkeit gibt, dieses Verhalten im Aufruf der Funktion selbst zu überschreiben, um zu sehen, die Nachricht generiert wird. Ich bin zurückhaltend, um die Datei zu ändern, die alle Funktionen enthält, da (1) sie groß ist, (2) sie sich regelmäßig ändert und (3) sie stark von der Gruppe geschützt ist, die sie unterstützt.
Ich habe versucht:
xyzzy >&1
zu versuchen, es zu überschreiben, aber der Ausgang noch nicht (möglicherweise, weil >&1
einen no-op betrachtet werden kann) nicht angezeigt.
Mit anderen Worten, da das Skript:
function xyzzy() {
echo hello
} >/tmp/junk
rm -f /tmp/junk
echo ================
echo Standard output
echo ----------------
xyzzy # something else here
echo ================
echo Function capture
echo ----------------
cat /tmp/junk
echo ================
es derzeit gibt:
================
Standard output
----------------
================
Function capture
----------------
hello
================
Was kann ich den xyzzy
Aufruf ändern, um hello
in den gedruckten zu erhalten Standard-Output-Abschnitt anstelle der Funktion Capture-Abschnitt?
Und das muss sein ohne versucht, die Datei zu lesen /tmp/junk
, nachdem es seit den tatsächlichen Umleitungen erstellt wird zu /dev/null
sein können, so werden sie nicht in einer Datei.
Nicht nützlicher Kommentar: Ich habe 'xyzzy 1>/tmp/aaa' versucht und die Datei wird berührt, aber nicht mit Daten gefüllt. Es hat das gleiche Verhalten wie 'xyzzy 2>/tmp/aaa'. – fedorqui
könnte es wert sein, dies auf http://unix.stackexchange.com zu fragen. – dogbane
@dogbane, ich war daran zerrissen, da es sowohl Programmieren als auch Unix scheint. Ich wollte keinen Crosspost machen, aber wenn ich hier keine Antwort bekomme, kann ich es später noch einmal versuchen. – paxdiablo