Auf diese Lösung bin ich auch gekommen mittlerweile, Danke. Es hat sich jetzt zeitlich überschnitten. Ich war nur etwas irritiert weil normal kann man das unter Gnome eigentlich bequem einstellen.
Der Linux Problem/Fragen-Thread
-
-
Gibt es eine Art frei konfigurierbares System-Monitoring, was ich auf der Konsole laufen lassen kann, was dann an Monitor angezeigt wird?
Hab kein X installiert, da ein Server. -
Bei mir führt dieser Code offenbar nicht zu einer Endlosschleife. Kann ich mich darauf verlassen, dass "*.c" immer komplett evaluiert wird bevor der Schleifeninhalt ausgeführt wird? Gilt das nur bei Bash oder auch für z.B. sh oder zsh?
-
Wird nur beim ersten Aufruf gecheckt, da kopfgesteuerte Schleife. Das später im Schleifeninneren geschehene kriegt der Schleifenkopf nicht mit. Damits ne Endlosschleife wird, müsste sie fußgesteuert sein.
-
Hmm ok, die Begriffe kopfgesteuert und fußgesteuert kenne ich zwar nicht, aber das klingt sehr nach einer einmaligen Evaluation am Anfang. Danke!
-
Nie Struktogramme gemalt?
-
Hab den Begriff mal in nem Lehrbuch gelesen, aber unser Softwaretechnik-Prof hat alles mit UML gemacht.
-
Mir ist nicht ganz klar, was es hier für eine Rolle spielen soll, ob die Bedingung am Anfang oder am Ende des Loops ausgeführt wird (wie soll eine fussgesteuerte "for i in x" Schleife überhaupt funktionieren, was ist i in ersten Durchlauf?). Das hier ist viel mehr eine Frage der Ausführungsregeln. Und bei einem For-Loop in der Shell wird das iterierte Set vor dem ersten Durchlauf vollständig evaluiert.
Um die Frage zu beantworten ob das nur in bash so funktioniert, oder generell: Der POSIX-Standard definiert die For-Schleife wiefolgt:
Zitat von http://pubs.opengroup.org/onlinepubs/007904875/utilities/xcu_chap02.html#tag_02_09_04_03
First, the list of words following in shall be expanded to generate a list of items.
Then, the variable name shall be set to each item, in turn, and the compound-list executed each time.Was genau Word-Expression sein können (also der Teil nach dem in, in dem Falle hier die Pathname-Extension *.c), steht hier:
http://pubs.opengroup.org/onlinepubs/007….html#tag_02_06 bzw den Link folgend hier: http://pubs.opengroup.org/onlinepubs/007….html#tag_02_13For-Loop Items können nicht (wie z.B. bei Python, for line in open('words.txt')) lazy generiert werden. Selbst bei sowas wie IFS=$'\n'; for line in $(cat words.txt); do echo $line ; done wartet die Shell bis der Befehl fertig ist und die Datei eingelesen, bevor die Ausgabe beginnt. Das ist anders als z.B. das while-Statement in Shell, wo cat words.txt | while read w ; do echo $w ; done direkt nach der ersten Zeile anfängt zu iterieren - beide Schleifen hier sind kopfgesteuert.
Zum selber testen, einfach das cat zu einem tail -f umwandeln.
TLDR: Ja, Shell garantiert dir, dass bei einem for Loop die Word List nur einmal initial evaluiert wird, und danach über jedes Item separat iteriert.
-
Zitat
wie soll eine fussgesteuerte "for i in x" Schleife überhaupt funktionieren, was ist i in ersten Durchlauf?
For-Schleifen sind IMMER kopfgesteuert, die Bedingung wird also vor dem ersten Durchlauf gecheckt. Anders sieht es bei fußgesteuerten Do-Loop-Schleifen aus, wo erst einmal durchgeführt und DANN erst die Bedingung gecheckt wird.
-
For-Schleifen sind IMMER kopfgesteuert, die Bedingung wird also vor dem ersten Durchlauf gecheckt. Anders sieht es bei fußgesteuerten Do-Loop-Schleifen aus, wo erst einmal durchgeführt und DANN erst die Bedingung gecheckt wird.
Ich habe nichts anderes behauptet. Nur ist ob kopf- oder fussgesteuert halt irrelevant, der Unterschied hier ist ob es for- oder while-Schleifen sind. Bei "for" wird die Expression nur einmal komplett evaluiert, bei "while" bei jedem Durchlauf. Beide sind kopfgesteuert. -
-
do-while ist wortwörtlich krebs
-
Gibt tatsächlich Situationen wo mans gebrauchen kann, sind aber selten.
-
Hat das mit der for-Schleife nicht eher Expansions- und Evaluations-Reihenfolge-Gründe? Die Bash expandiert doch zunächst *.c zu foo.c und eröffnet folglich die Schleife for fname in foo.c, weil zum Zeitpunkt der Expansion lediglich foo.c existierte. Eine erneute Expansion findet nicht statt.
-
^ Hätte ich jetzt auch so vermutet.
-
Wie ist es eigentlich mit Linux und Mainboardtausch. Bin am Überlegen ob ich meinen Linuxrechner upgrade. Überlebt der sowas, oder ist es wie bei Windows, dass es mal klappen kann, aber dann doch zuviel quer geht?
-
Bei mir hat es bis jetzt immer geklappt, hatte da nie Probleme. Wo du eventuell nachkonfigurieren musst, wenn du einen Herstellertreiber für deine GraKa verwenden willst und du Onboard-Grafik genutzt hast und jetzt einen anderen Hersteller vom Grafikchip hast.
Also ich gehe jetzt davon aus, dass du den normalen Distributionskernel deiner Distri verwendest und dir nicht selbst was zusammengebaut hast, dann wäre es komplizierter. -
Wie ist es eigentlich mit Linux und Mainboardtausch. Bin am Überlegen ob ich meinen Linuxrechner upgrade. Überlebt der sowas, oder ist es wie bei Windows, dass es mal klappen kann, aber dann doch zuviel quer geht?Das verkraftet Linux sehr leicht, ist für dich also Problemlos zu machen.
-
Cool. Bisher habe ich keine eigenen Treiber verwendet. Ist nen altes Atom board. Überlege auf was jüngeres tu wechseln. Finde aber bei den aktuellen das preis-leistungsverhältnis zu den ersten core i celerons nicht gut. Muss mal schauen.
-
und dir nicht selbst was zusammengebaut hast, dann wäre es komplizierter.Das ist auch nicht wirklich kompliziert. Vor dem Hardware-Tausch macht man zusätzlich den Distro-Kernel im Bootloader startbar, sofern man den eh nicht als Alternative starten kann, was beim Selbstkompilieren des Kernels als Fallback i.d.R. sinnvoll ist. Nach dem Hardwaretausch startet man einmal mit dem Distro-Kernel und baut dann einen zur neuen Hardware passenden Kernel.
-
Jetzt mitmachen!
Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!