Ein Skript kann man übrigens im Terminal laufen lassen - dann zeigt es auch die COLUMNS an, behaupte ich.
Genau das hab ich gemacht, das Skript ganz normal im Gnome Terminal aufgerufen. Da funktioniert es nicht.
Anmeldungsdatum: Beiträge: 851 |
Genau das hab ich gemacht, das Skript ganz normal im Gnome Terminal aufgerufen. Da funktioniert es nicht. |
||||||
Anmeldungsdatum: Beiträge: 17548 Wohnort: Berlin |
Stimmt! Ich bin überrascht. Aber mit
geht's oder mit angepasstem Shebang:
|
||||||
Anmeldungsdatum: Beiträge: 330 |
Funktioniert bei mir nicht. Wenn ich allerdings: export COLUMNS=$COLUMNS eingebe klappt es auch im Script mit normaler Shebang |
||||||
Anmeldungsdatum: Beiträge: 187 |
breite=$(tput cols) wäre noch eine Möglichkeit. |
||||||
Projektleitung
Anmeldungsdatum: Beiträge: 12801 |
Die Grenze ist der Bildschirm - so wie unter Linux auch. Kann es sein, dass es schon eine Weile her ist, dass Du mal Cygwin benutzt hast?
Ja, aber ich würde kein Skript davon abhängig machen, dass es aus einer
Das ist mal wieder dieses Totschlagargument...
Nö.
Deswegen steht da ja "im Moment des Abrufs", weil ich Dich ja schon kenne. 😉
Wie gesagt, das funktioniert nur mit der Ciao robert |
||||||
Projektleitung
Anmeldungsdatum: Beiträge: 12801 |
|||||||
Anmeldungsdatum: Beiträge: 17548 Wohnort: Berlin |
Beides nicht? Du rufst aber das Bashscript richtig auf, nicht mit sh x.sh oder so?
Das ist aber fishy. |
||||||
Anmeldungsdatum: Beiträge: 17548 Wohnort: Berlin |
Nun, viel mehr als 10 Jahre nicht, aber intensiv habe ich Cygwin nie benutzen müssen.
Ja, lieber sich eine Abhängigkeit zu grep und stty einhandeln. Vielleicht kann man es auch mit Assembler lösen?
Totschlagargument ist ja eher, dass jemand schreibend auf die Variable zugreift, ohne es zu wollen und zu merken.
Im Moment des Abrufs mittels stty oder mittels Zugriff auf $breite? Dass der Wert bei der Zuweisung stimmt wollen wir ja mal hoffen. Nur dass mein Beispiel gerade demonstriert hat, dass der Zugriff auf $COLUMNS innerhalb der Schleife immer wieder den jüngsten Wert bekommt, also gerade nicht einen anno tobak ermittelten Wert.
Ja, ein Außenbordmotor funktioniert nicht beim Flieger, nur beim Boot. Dein Zeuch funktioniert nur bei Anwesenheit von dash, dish, fisch, grep und stty. So what?
Das war der Inhalt meines Skriptes, dass man das bei der Bash eben nicht muss.
Der Wert wird nicht von der aufrufenden Shell geerbt.
Da wo der Wert von 65 auf 126 wechselt habe ich das Fenster maximiert.
Falsch.
Insbesondere wird das passieren, wenn Du mit stty und grep einmal die Breite ermittelst und später verwendest. Aber gegen jede Änderung der Terminalgröße, wie sie ja auch nicht wahrscheinlich ist, kann man sich ja eh nicht absichern. Getätigte Ausgaben werden auch im Nachhinein nicht korrigiert. Hauptpunkt ist, dass man sich das Leben leicht macht, und bash+$COLUMNS ist leicht und halbwegs robust. |
||||||
Anmeldungsdatum: Beiträge: 330 |
Nicht, dass ich wüsste. 😉 Aber
Moment, so ist das nicht. Nach dem export klappt
Hehe, ich kannte mal jemanden der Fishy genannt wurde 😎. Es ist ein KDE-Terminal (Konsole) unter Arch. Ändert aber ja nicht grundlegend was an der Shell. Eher im Gegenteil. Mich wundert aber, dass es bei Dir mit Nochmal was zu den Befehlsvarianten: stty size Gibt auch Lines und Columns aus (und nur das). Das könnte man ja auch ganz ohne Gehampel weiterverarbeiten. Gute Nacht. |
||||||
Anmeldungsdatum: Beiträge: 187 |
Negativ, sh (bei mir ein Link auf die Bash) kennt keine Shebangs. |
||||||
Anmeldungsdatum: Beiträge: 17548 Wohnort: Berlin |
Mit sh x.sh rufst Du das, was als sh definiert ist, möglicherweise die Dash oder die Bash in einem Kompatibilitätsmodus oder was immer auf, und übergibst als Parameter x.sh. Was sh dann damit macht ist dessen Sache - zu interpretieren versuchen. Du kannst genauso libreOffice x.sh aufrufen oder tail x.sh, cat x.sh oder gimp x.sh - der Ablauf ist immer gleich: Das Programm wird gestartet und der Parameter übergeben unabhängig vom Shebang. Nur beim direkten Aufruf ./x.sh , bei dem die Datei auch ausführbar geflaggt werden muss (in den anderen Fällen nicht nötig) wird der shebang ausgewertet.
Nein - das sollen 2 unterschiedliche, getrennte Aufrufe sein. Wie soll denn COLUMNS=$COLUMNS funktionieren, wenn $COLUMNS nicht bekannt ist, und wieso, wenn es bekannt ist, soll echo $COLUMNS nicht funktionieren?
Und wer sagt, dass die Variable nicht im Environment steht? Aus /etc/bash.bashrc
KDE-Terminal unter Arch ist m.E. nicht Lubuntu 14.04 (Thursty Tahr) aber ich mag mich irren. Mein System: Xubuntu 12.4 |
||||||
Anmeldungsdatum: Beiträge: 330 |
[...]
Ok, gekauft. Ich habe da keine Erfahrung mit, denn: Ich rufe ein Script (auch perl oder python oder was auch immer) grundsätzlich direkt auf, deswegen spielt das für dieses Problem keine Rolle.
Wer sagt denn, dass $ env | grep COLUMNS $ echo $COLUMNS 108 $ cat test.sh #!/bin/bash echo $COLUMNS $ ./test.sh $ export COLUMNS=$COLUMNS $ env | grep COLUMNS COLUMNS=108 $ ./test.sh 108
Bei mir sagt das
Nun ja, Du hast eben ein anderes Terminal. Ich wollte nur sagen, dass ich bash verwende nicht nicht irgend eine skurrile shell. Mir ging es nicht darum irgendwen zu verbessern, sondern habe nur beschrieben, wie sich |
||||||
Projektleitung
Anmeldungsdatum: Beiträge: 12801 |
Das ist ein entscheidender Punkt: ich benutze nicht die
s.o.
Was "leicht" ist, ist halt bei jedem anders. Ciao robert |
||||||
Anmeldungsdatum: Beiträge: 2123 Wohnort: Gelsenkirchen |
|||||||
Anmeldungsdatum: Beiträge: 17548 Wohnort: Berlin |
Offenbar hängt es an der /etc/bash.bashrc die bei (x)ubuntu anders konfiguriert ist. Mit
erreichst Du auch nur, dass ein punktueller Wert bekannt gemacht wird. |