Wie man am besten erfassen und melden Sie sich scp Ausgabe?
Frage
Ich versuche, Ausgabe von einem Installationsskript zu erfassen (das verwendet scp) und log sie. Aber ich bin immer nicht alles, was scp druckt aus, nämlich die Fortschrittsbalken.
Bildschirmausgabe:
Kopieren / User2 / cdb / Builds / tmp / uat / myfiles / * zu Server / Benutzer / myfiles als cdb
cdb @ server-Passwort: myfile 100% | ***************************** | 2503 00.00
Log-Ausgabe:
Kopieren / User2 / cdb / Builds / tmp / uat / myfiles / * zu Server / Benutzer / myfiles als cdb
Ich würde wirklich gerne wissen, dass meine Datei dort ankamen. Hier ist, was ich versuche jetzt ohne Erfolg:
myscript.sh 2> & 1 | tee mylogfile.log
Hat jemand eine gute Möglichkeit, scp Ausgabe und melden Sie es zu erfassen?
Danke.
Lösung
Es sieht aus wie Ihr gerade fehlt, ob die scp war erfolgreich oder nicht aus dem Protokoll.
Ich vermute, die Bildlaufleiste nicht auf die Standardausgabe nicht gedruckt und verwendet ncurses oder eine andere Art von TUI?
Sie könnten bei dem Rückgabewert von scp aussehen nur um zu sehen, ob es erfolgreich war. Wie
scp myfile user@host.com:. && echo success!
man scp
sagt
scp exits with 0 on success or >0 if an error occurred.
Andere Tipps
scp druckt seine Fortschrittsbalken an den Terminal-Steuercodes. Es erkennt, ob Sie die Ausgabe umleiten und so den Fortschrittsbalken weglassen.
können Sie erhalten rund um die scp von austricksen zu denken, es in einem Terminal läuft das „Script“ Befehl, der auf den meisten Distributionen standardmäßig installiert ist:
script -q -c "scp server:/file /tmp/" > /tmp/test.txt
Der Inhalt test.txt wird:
file 0% 0 0.0KB/s --:-- ETA
file 18% 11MB 11.2MB/s 00:04 ETA
file 36% 22MB 11.2MB/s 00:03 ETA
file 54% 34MB 11.2MB/s 00:02 ETA
file 73% 45MB 11.2MB/s 00:01 ETA
file 91% 56MB 11.2MB/s 00:00 ETA
file 100% 61MB 10.2MB/s 00:06
... und das ist wahrscheinlich das, was Sie wollen.
ich über dieses Problem gestolpert, während die Ausgabe eines interaktiven Skripts in eine Log-Datei umgeleitet werden. Im Protokoll nicht die Ergebnisse, die war kein Problem, da man immer Exit-Codes auswerten kann. Aber ich wirklich den interaktiven Benutzer wollte die Fortschrittsbalken zu sehen. Diese Antwort löst beide Probleme.
Vielleicht können Sie ‚ Skript ‘anmelden, um die Terminal-Sitzung.
scp myfile user@host.com:. && echo success!
ist sehr hilfreich, aber die Nachricht in eine Protokolldatei schreiben ich es wie folgt geändert
scp myfile user@host.com:. && echo myfile successfully copied! >> logfile 2>&1
und dies wird schreiben „MyFile erfolgreich kopiert!“ Nachricht an die Protokolldatei.
Versuchen:
scp server:/file /tmp/ > /dev/tty
Ich kann noch nicht kommentieren :( also werde ich ein Update hier hinzufügen ...
@ Martin hatte die beste Lösung für mich, obwohl, wenn Ihr Befehl scp auf halbem Weg durch das Skript wird dann ausgegeben, es ist kann nach Befehlen angezeigt, die tatsächlich danach liefen.
Ich denke, das liegt daran, dass Skript muss den Befehl in einer Subshell laufen, aber ich bin noch zu testen.
EDIT: es in der Tat eine Shell nicht laichen so, wenn Sie Dinge ausführen müssen (und nicht in der Tat) in einer sequentiellen Weise (wie in einem Build-Skript), dann würden Sie eine gewisse Logik um die Verwendung des Script-Befehl hinzufügen.
d.
Skript -q -c "Ihr Befehl" && sleep 1
oder etwas ähnliches, so dass Ihre Eltern-Shell wartet auf das Kind Shell, bevor sie zu beenden.
Ja, ich vor kurzem versuchte Ausgabe innerhalb eines PHP-Skript von proc_open zu erhalten () Ich verlor eine ruhige eine Zeit versucht Ausgang :-) zu bekommen aber es ist ein bisschen spät hier und ich dann Lesen dieser Nachricht hier wurde mir klar, dass ich nicht wirklich brauchen diese Ramsch Ausgang mein Skript
nur der Exit-Code wird den Job: -)
$ exit_code = proc_close ($ process);
$ grep -r "Error" xyz.out > abc.txt
Hier in dem obigen Befehl I Ausgabe in Datei abc.txt ist zu speichern.
Dieses grep
Befehl ist für die Textsuche containg Fehler in der Datei xyz.out und Speichern der Ausgabe in abc.txt ohne auf Konsole Anzeige .