Befehle unterdrücken und alternative anzeigen

betzi1985

Grünschnabel
Hi,

mein Kumpel will in seine Programme eine fortschrittsanzeige anbauen, das das immer so eine Sache ist, habe ich ihm davon angeraten. Seine Alternative, er will einen Linuxbefehl ausführen BeispiEl sudo apt update oder sudo apt dist-upgrade

Jetzt will er die Anzeige der Befehlsausführung von Linux unterdrücken, also dann man nicht sieht, dass er die Paketquellen aktualisiert oder ähnliches. Alternativ sollen, solange der Befehl ausgeführt wird, ...... auf den Bildschirm geschrieben werden, oder ein drehender Cursor dargestellt werden, ist dies möglich und wie?

viele Grüße

Betzi
 
Ich habe jetzt nicht ganz verstanden, was du oder dein Kumpel machen wollen. Wollt ihr selbst etwas programmieren (z.B. in Python) und dabei eine Fortschrittsanzeige erstellen? Oder soll ein Befehl im Hintergrund ausgeführt werden und dabei eine kleine Animation?

Also für den Fall, dass ihr quasi nur etwas Eyecandy für die Shell zaubern wollt, guckst du hier:
https://stackoverflow.com/a/20165094
Und wie einer in den Kommentaren geschrieben hat, findet sich hier ein schöner Anwendungsfall davon:
https://stackoverflow.com/a/42318974
Ich selbst habe auch schnell ein Bash-Skript gebastelt:
Bash:
#!/bin/bash

sudo echo "Update with animation"

# Wir müssen nach diesen Signalen Ausschau halten.
# Und falls der Hintergrundprozess schon gestartet wurde,
# diesen dann auch töten.
trap '[ -z $! ] || kill $!' SIGHUP SIGINT SIGQUIT SIGTERM
sudo apt update &> update_log.txt &  # Mache ein Update.
# Das Verzeichnis unter /proc existiert so lange, wie der Prozess läuft.
while [ -e /proc/$! ]; do
    echo -n "."  # Gib einen Punkt aus, sehr kreativ.
    sleep 0.1    # Wichtig sonst läuft der Terminal voll.
done

echo "Done!" # Ferdisch.


Gruß Technipion
 
Unter Python gibt es das Modul tqdm, mit dem man einfache Fortschrittsanzeigen machen kann.
Um die Ausgabe der Shell zu unterdrücken muss man die Standardausgabe und Standardfehler nach /dev/null umleiten.
Code:
 cp foo bar &> /dev/null
 
Unter Python gibt es das Modul tqdm, mit dem man einfache Fortschrittsanzeigen machen kann.
Dafür kriegste nen Daumen von mir, ich kannte tqdm noch nicht. Sieht aber nice aus.

Um die Ausgabe der Shell zu unterdrücken muss man die Standardausgabe und Standardfehler nach /dev/null umleiten.
BeispiEl sudo apt update oder sudo apt dist-upgrade
Prinzipiell schon, aber ich halte es für keine gute Idee die Ausgabe von apt-Aufrufen zu verwerfen (oder auch von sudo-Befehlen im Allgemeinen). Naja, eigentlich erschließt sich mir auch nicht, warum man die Ausgabe unterdrücken möchte. Die ist ja aus einem guten Grund da.

Etwas anderes ist es natürlich, wenn man selbst ein Programm erstellt (z.B. in Python), das Unterprogramme aufrufen soll. Da kann es Sinn machen die TUI aufhübschen zu wollen. Eine nette Möglichkeit wäre es imho, mittels curses eine ProgressBar ganz unten hinzuklatschen, aber dafür die Ausgabe im Haupt-Terminal-Window weiterlaufen zu lassen.
 
Dafür kriegste nen Daumen von mir, ich kannte tqdm noch nicht. Sieht aber nice aus.



Prinzipiell schon, aber ich halte es für keine gute Idee die Ausgabe von apt-Aufrufen zu verwerfen (oder auch von sudo-Befehlen im Allgemeinen). Naja, eigentlich erschließt sich mir auch nicht, warum man die Ausgabe unterdrücken möchte. Die ist ja aus einem guten Grund da.

Etwas anderes ist es natürlich, wenn man selbst ein Programm erstellt (z.B. in Python), das Unterprogramme aufrufen soll. Da kann es Sinn machen die TUI aufhübschen zu wollen. Eine nette Möglichkeit wäre es imho, mittels curses eine ProgressBar ganz unten hinzuklatschen, aber dafür die Ausgabe im Haupt-Terminal-Window weiterlaufen zu lassen.


Sorry das ich mich erst jetzt melde, hatte viel zu tun.

Das mit dem apt update war ein Beispiel. Er hat ein Script erstellt, dass man nach der Linux installation ausführen kann, dass alle Konfigurationen wieder so sind wie vorher. Beispiel es kommt eine neue Version seines Linuxsystem raus, dann installiert er das Linux und führt das Script aus und die EInstlelung ist wieder genau wie vorher. Dann muss man das nicht alles per Hand machen. Er möchte das Skript halt auch Linux Anfängern zur Verfügung stellen, dass die ein schön schlankes System haben, und nicht 500 Befehle von Hand ausführen müssen udn alles Programme einzeln installieren müssen. Dazu hat er auch ein Handbuch erstellt. Erste Schritte mit Linux wo alle Sachen aus dem Skript einzeln erklärt sind. Man kann entweder das Handbuch durcharbeiten, oder das Skript ausführen.

Da er aber gerne etwas Grafik in seinem Skript haben möchte, kommmen halt so ein paar Fragen auf, wie das zu Bewerkstelligen ist. Aktuell hat er nur so kleine Popupfenster, wo der Anwender mit dem Skript interagieren kann. Wenn ein Befehl länger dauert, sieht der Anwender nicht, was passiert. Daher will er z.B. bei sudo apt update eine eigene Fortschritssanzeige bauen, damit der Anwender sieht, es passiert was und wie lange es ungefähr dauert. Oder ein Block mit mehrern Befehlen, würde er auch gerne mit Fortschritssanzeige bauen.

Warum ich hier als Beispiel update bzw dist-upgrade, weil der Befehl ja tendentiell etwas länger dauert, um so eine Anzeige mal zu testen. Darum ging es nur. Ich gebe Dir natürlich recht, dass man das prizipiell nicht ausschalten sollte, die Ausgaben. Aktuell ist es aber soweit ich weiß so, dass Durch seine grafische Interaktion eh nichts angezeigt wird auf der Konsole, deswegen will er ja etwas eigens Entwickeln. Er hat nur leider keine Ahnung von Programmieren und ich habe jetzt erst wieder mit LInux angefangen und habe mit Shell noch nichts am Hut gehabt, sorry.
 
Dazu hat er auch ein Handbuch erstellt. Erste Schritte mit Linux wo alle Sachen aus dem Skript einzeln erklärt sind. Man kann entweder das Handbuch durcharbeiten, oder das Skript ausführen.
Gibt es denn vielleicht einen Link zu besagtem Handbuch? :)

Ich verstehe jetzt immerhin den Anwendungsfall. Allerdings gibt es auch schon fertige Lösungen (FOSS), die das Deployment von vorgefertigten Systemkonfigurationen und Migration erlauben. Evtl. wäre dein Freund ja gewillt auf sowas umzuschwenken?
 
Zurück