Ihr Befehl funktioniert und leitet die Ausgabe ordnungsgemäß in die Datei um abc.txt
.
Die Frage ist, wie Ihr Skript die Eingabedaten fragt und wie Sie das Skript ausführen.
Lassen Sie uns mit zwei Beispielen sehen:
# Script_1.sh # 1
echo Please, enter your firstname and lastname # 2
read FN LN # 3
echo "Hi! $LN, $FN !" # 4
und
# Script_2.sh # 5
read -p "Enter a comment " CM # 6
echo "You said $CM" # 7
Wenn Sie laufen /bin/bash Script1.sh > abc.txt
, wird die Frage "Bitte eingeben ..." auf Ihrem tty nicht angezeigt. Wenn Sie die erwartete Eingabe über die Tastatur geben, finden Sie die Ausgabe der Zeilen 2 und 4 in Ihrer abc.txt
Datei.
Wenn Sie ausführen /bin/bash Script2.sh > abc.txt
, wird die Frage "Kommentar eingeben" angezeigt, in der abc.txt
Datei wird jedoch nur die Ausgabe der Zeile 7 angezeigt.
Hinweis: Wenn Sie Script2 ausführen, sh in einer Subshell
(bash Script2.sh 2>&1)> abc.txt
Sie werden keine Ausgabe auf tty sehen und Sie werden alle in der abc.txt
Datei finden.
Wenn Sie es mit ausführen
bash Script2.sh 2>ccc.txt 1>ddd.txt`
Sie finden die Standardausgabe (Zeile 7) in ddd.txt
und den Standardfehler (Zeile 6) in ccc.txt
.
Wenn Sie nur einen Teil Ihrer Befehlsausgabe umleiten möchten , müssen Sie Ihr Skript ändern.
Eine Möglichkeit besteht darin, eine Funktion zu erstellen, mit der der Teil des Skripts verschoben werden kann, der die interessante Ausgabe generiert (siehe unten). Anschließend können Sie diese Funktion über den Hauptteil Ihres Skripts (wo ursprünglich der Code war, den Sie in die Funktion verschoben haben) aufrufen und nur diese Ausgabe in die Protokolldatei umleiten:
Part_To_Redirect(){
: # all that you want
}
# ... Main part of the script
# point where it was the part that generates the output
Part_to_Redirect "$@" > abc.txt # this to store only that part in the file
# Part_to_Redirect "$@" >> abc.txt # this to append that part in the file
# ...
Sie sollten auch nützlich finden , tee
dass
Leitet die Ausgabe in mehrere Dateien um, kopiert die Standardeingabe in die Standardausgabe und auch in alle als Argumente angegebenen Dateien.
the_command | tee abc.txt # To redirect Standard output
or
the_command 2>&1 | tee abc.txt # To redirect err in out and both in the file
In diesem Fall haben Sie die normalen Ausgaben Ihres Befehls auf dem tty, aber gleichzeitig speichern Sie eine Kopie in der Protokolldatei abc.txt
. In Ihrem Fall sollte es gemütlich sein, wenn Sie read -p
den Aufruf wie im Skript2 verwenden the_command | tee abc.txt
.
Anmerkungen und Referenzen:
Durch Hinzufügen können "$@"
Sie alle Argumente Ihres Skripts an die Funktion übergeben.
Es kann interessant sein, mehr über die Basisrichtung aus vielen Quellen im Internet zu lesen.