Linux 15.032 Themen, 107.080 Beiträge

linux bash skript system updaten

Alekom / 9 Antworten / Baumansicht Nickles

Hallo Leute, ich habe mir gestern ein kleines Bashskript geschrieben, welches nach der Installation von Linux auf den Rechner das System aktualisiert sowie die Software installiert die ich will.

Ich will alles in Dateien mitprotokollieren, damit ich nachverfolgen kann was eigentlich gemacht wurde.

Nur funktioniert das nicht so wie gewünscht, da er im Terminal zwar das Skript ausführt, aber man sieht keinen Fortschritt. Man sieht nur den Cursor.

Normalerweise listet er ja im Terminal die ganze Prozedur auf wenn man eben nicht gerade in eine Datei schreiben möchte.

Beispiel:

apt-get update -y > system_auffrischung.txt &&

apt-get upgrade -y >> system_auffrischung.txt &&

usw ...

Habe schon alles probiert, nur mit einem &, ohne &, Ergebnis ist nicht so wie gewünscht.

Ich möchte das er alles in eine Textdatei schreibt UND ich aber währenddessen gleichzeitig trotzdem nachverfolgen kann was im Terminal passiert.

Und man kann auch abschätzen wie weit das ganze fortgeschritten ist.

Ist das überhaupt möglich?

Und ja, natürlich bin ich root. Rechte sind gesetzt und dieses ./ vor dem Befehl wurde auch gemacht.

nette Grüße Alekom

Alles hat seinen Sinn, auch das scheinbar Sinnlose, denn es gibt nichts ohne Sinn.
bei Antwort benachrichtigen
Borlander Alekom „linux bash skript system updaten“
Optionen
Ich möchte das er alles in eine Textdatei schreibt UND ich aber währenddessen gleichzeitig trotzdem nachverfolgen kann was im Terminal passiert.

tee macht genau das was Du willst :-)

Dort reinpipen und tee schreibt dann den eigenen in die Datei und gibt ihn gleichzeitig auf der Konsole aus.

Bei wiederholtem Aufruf müsstest Du dann entsprechend tee mit Parameter -a aufrufen, oder aber Du schreibst Dir im Bash-Script zunächst eine Funktion zum Durchführen der Updates und rufst diese dann einmalig mit tee auf ;-)

Gruß
Borlander

bei Antwort benachrichtigen
Alekom Borlander „tee macht genau das was Du willst :- Dort reinpipen und tee ...“
Optionen

hallo Borlander,

danke für den Tip, werde mir mal den Befehl tee anschauen. Den habe ich noch nie verwendet.

Ich vermute du hast es so gemeint:

apt-get update -y tee > systemblabla.txt

apt-get upgrade -y tee -a > systemblabla.txt

ich hab den befehl so verstanden das man das >> nicht mehr benötigt?

Alles hat seinen Sinn, auch das scheinbar Sinnlose, denn es gibt nichts ohne Sinn.
bei Antwort benachrichtigen
mi~we Alekom „hallo Borlander, danke für den Tip, werde mir mal den Befehl tee ...“
Optionen

Du musst da den Pipe-Operator (keine PanikLächelnd) verwenden. Lies mal hier zu 'tee':

https://wiki.ubuntuusers.de/Shell/Umleitungen#tee-Ausgabe-verdoppeln

Es muss also in etwa so aussehen

apt-get update | tee systemblabla.txt

etc....

"Es wäre dumm, sich über die Welt zu ärgern. Sie kümmert sich nicht darum." (Marc Aurel)
bei Antwort benachrichtigen
Alekom mi~we „Du musst da den Pipe-Operator keine Panik verwenden. Lies mal hier ...“
Optionen

mit kommandozeile hab ich keine panik, bin noch mit msdos in berührung gekommen. Verschlossen

hab nimmer genau gewusst was mit pipe gemeint ist...so wie damals | more

danke für den tipp und für das beispiel. ich brauche es immer veranschaulicht. da gehts dann etwas leichter. *g*

Alles hat seinen Sinn, auch das scheinbar Sinnlose, denn es gibt nichts ohne Sinn.
bei Antwort benachrichtigen
mi~we Alekom „mit kommandozeile hab ich keine panik, bin noch mit msdos in ...“
Optionen
hab ich keine panik

Prima, dann bin ich beruhigt. Wenn ich deine Antwort an Borlander richtig interpretiere, scheint es jetzt ja auch wie gewünscht zu funktionieren.

"Es wäre dumm, sich über die Welt zu ärgern. Sie kümmert sich nicht darum." (Marc Aurel)
bei Antwort benachrichtigen
Borlander Alekom „hallo Borlander, danke für den Tip, werde mir mal den Befehl tee ...“
Optionen

> und >> leiten den Standard-Output-Stream (der wird in einer interaktiven Konsole ansonsten immer ausgegeben) in eine Datei um. > überschreibt eine bereits vorhandene Datei, >> hängt neue Ausgaben ans Dateiende an.

Mit Pipe "|" wird die Standard-Ausgabe eines Prozesses direkt in die Standard-Eingabe eines anderen Prozzesses weitergeleitet (ohne, dass man die Ergebnisse erst zwischendurch in eine Datei schreiben müsste und diese anschließend wieder einliest).

tee macht folgendes. Es gibt den Standard-Input-Stream unverändert im Standard-Output-Stream aus (und bewirkt somit die Bildschirmausgabe wenn die nicht umgeleitet wird) und gibt schreibt diese gleichzeitig auch in eine Datei.

bei Antwort benachrichtigen
Alekom Borlander „und leiten den Standard-Output-Stream der wird in einer ...“
Optionen

hab schon verstanden, ich hab jetzt im terminal 3 verschieden befehle eingegeben:

lsusb | tee system.txt

lspci | tee -a system.txt

ifconfig -a | tee -a system.txt

und siehe da es hat funktioniert. alles wurde erstellt UND angehängt.

natürlich kann man dann noch verfeinern um zu sehen was was ist.

vielen dank

Alekom

Alles hat seinen Sinn, auch das scheinbar Sinnlose, denn es gibt nichts ohne Sinn.
bei Antwort benachrichtigen
Borlander Alekom „hab schon verstanden, ich hab jetzt im terminal 3 verschieden ...“
Optionen

Prima :-)

Statt nun hinter jeden Programmaufruf tee zu hängen kannst Du auch alle in einer Funktion zusammenfassen und diese dann mit Tee aufrufen:

Prima :-)

Statt nun hinter jeden Programmaufruf tee zu hängen kannst Du auch alle in einer Funktion zusammenfassen und diese dann mit Tee aufrufen:

#!/bin/bash

collectSystemInfo()
{
  lsusb
  lspci
  ifconfig -a
}

collectSystemInfo | tee system.txt
bei Antwort benachrichtigen
Alekom Borlander „Prima :- Statt nun hinter jeden Programmaufruf tee zu hängen ...“
Optionen

ok da merkt man den profi Lachend

danke für das beispiel !

herzlichen dank

Alles hat seinen Sinn, auch das scheinbar Sinnlose, denn es gibt nichts ohne Sinn.
bei Antwort benachrichtigen