echo "This is important message" > /dev/tty
das sagt, "-Ausgabe an dem tty". Sie können das Terminal selbst nicht umleiten. Sie müssen stattdessen Ihr Skript ändern.
(Die einzige Möglichkeit, die Ausgabe mit dem Skript zu verhindern, besteht darin, es mit einem steuernden Terminal laufen zu lassen, das nicht ausgibt, zB einem Pseudo-Terminal, dessen Ausgabe vom Master verbraucht wird.
Dort aren Ich kenne keine Allzweck-Tools, um dies zu tun
siehe unten).
Ihre Frage beinhaltet ein Missverständnis, wie Umleitung funktioniert/was es tut. Die Zeilen, die Sie in der Shell schrieb nicht tun, was Sie scheinen zu denken:
exec 3<> /dev/tty
Diese leitet die # 3 Dateideskriptor an den Steueranschluss (die normalerweise nicht mit allem, was ohnehin verbunden ist).
./test.sh > /dev/null 3>&1 #Send whatever comes to /dev/tty(3) to /dev/null
Nein; es sendet, was auch immer an den Dateideskriptor # 3 gerichtet ist, an das aktuelle Ziel des Dateideskriptors # 1 (welches/dev/null ist). Aber das hat keinen Einfluss auf Ihr Skript, das ausdrücklich eine Nachricht an das tty-Gerät sendet (kontrollierendes Terminal, das normalerweise das Terminal wäre, von dem aus Sie den Befehl ausgeführt haben).Insbesondere gibt der echo
-Befehl im Skript an stdout (Dateideskriptor # 1) aus, der für diesen Befehl zu /dev/tty
, d. H. Dem steuernden Terminal, umgeleitet wird.
socat Mit dem Steuerungsanschluss ändern
Sie können das „socat“ Programm den Steuerungsanschluss an einen Pseudoterminal ändern und den Master-Ausgangs zu/dev/null, mit einer Befehlszeile ähnlichen Umleitung zu die folgenden:
socat EXEC:./test.sh,pty,setsid /dev/null
socat das Programm verbindet eine Eingangsenke/Ausgabequelle zu einem anderen Eingang Enke/Ausgabequelle. In diesem Fall verbindet es die Eingabe/Ausgabe des angegebenen Programms mit/dev/null über ein Pseudoterminal (Option "pty"), das zum steuernden Terminal gemacht wird (Option "setsid").
Warum echote Nachricht an ** tty ** aus dem Skript? Warum nicht diese Zeile nur "echo" Dies ist wichtig Nachricht "' dann Ausgabe von Shell steuern. – Kadir
In einem Skript habe ich 'eval" ./test.sh &>./Test_command.log 'verwendet, um die Ausgabe des Konsolenfensters in die Textdatei' test_command.log' umzuleiten '&' vor deinem '>' Übrigens gibt es eine wirklich gute Erklärung aller Möglichkeiten für die I/O-Umleitung [TLDP-Leitfaden] (http://www.tldp.org/LDP/abs/html/ (io-redirection.html) –
@VladislavMartin Die Ausgabe wird nicht zum Konsolenfenster umgeleitet, das 'eval' ist nicht notwendig und es wird einfach sowohl die Standardausgabe als auch der Standardfehler umgeleitet (beides ist * zuvor * möglich) die Konsole) zu einer Datei. – chepner