Vergleich von Zahlenwerten in "if"
Hallo Liste, trotz mehrerer Stunden ausprobieren bin ich nicht weitergekommen. Und zwar möchte ich Zahlenwerte in einer IF-Abfrage in einem Shell-Skript vergleichen und dann entsprechend agieren. Die Werte "BildBreite" und "BildHoehe" hole ich in Pixeln mit awk aus einer Datei. Und nun möchte ich, wenn BildBreite oder BildGroesse > 1280 Pixel sind, die Bilder runterrechnen. Schon für if [ $Bildbreite < 1280 ]; then ..... verkleinere ...... funktioniert nicht, er nimmt die Zahlenwerte nicht an. Habe schon alle { / ( / ? / ` / ' - Kombinationen versucht aber bisher ohne Erfolg. Sicher gibt's eine ganz einfache Lösung, dass der $Bildbreite und die 1280 als Zahlenwert interpretiert. Viele Grüsse Joachim
Joachim Kieferle
trotz mehrerer Stunden ausprobieren bin ich nicht weitergekommen. Und zwar möchte ich Zahlenwerte in einer IF-Abfrage in einem Shell-Skript vergleichen und dann entsprechend agieren. Die Werte "BildBreite" und "BildHoehe" hole ich in Pixeln mit awk aus einer Datei.
Und nun möchte ich, wenn BildBreite oder BildGroesse > 1280 Pixel sind, die Bilder runterrechnen.
Schon für
if [ $Bildbreite < 1280 ]; then ..... verkleinere ......
funktioniert nicht, er nimmt die Zahlenwerte nicht an. Habe schon alle { / ( / ? / ` / ' - Kombinationen versucht aber bisher ohne Erfolg. Sicher gibt's eine ganz einfache Lösung, dass der $Bildbreite und die 1280 als Zahlenwert interpretiert.
if [ $a -lt $b ]; then ....; fi Wobei [ ein "ganz gewöhnliches" Kommando ist, siehe ls -l /usr/bin/[ -> test Mehr dazu also unter: man test Bye Jprgem -- Dr.rer.nat. Juergen Vollmer, Viktoriastrasse 15, D-76133 Karlsruhe Tel: +49(721) 9204871 Fax: +49(721) 24874 Juergen.Vollmer@[informatik-vollmer.de|alumni.uni-karlsruhe.de|acm.org] www.informatik-vollmer.de
Hi On Wednesday 21 April 2004 09:53, Joachim Kieferle wrote:
Hallo Liste,
trotz mehrerer Stunden ausprobieren bin ich nicht weitergekommen. Und zwar möchte ich Zahlenwerte in einer IF-Abfrage in einem Shell-Skript vergleichen und dann entsprechend agieren. Ja die manpage bringt einen manchmal zum verzweifeln.
Die Werte "BildBreite" und "BildHoehe" hole ich in Pixeln mit awk aus einer Datei.
Und nun möchte ich, wenn BildBreite oder BildGroesse > 1280 Pixel sind, die Bilder runterrechnen.
Schon für
if [ $Bildbreite < 1280 ]; then ..... verkleinere ......
funktioniert nicht, er nimmt die Zahlenwerte nicht an. Habe schon alle { / ( / ? / ` / ' - Kombinationen versucht aber bisher ohne Erfolg. Sicher gibt's eine ganz einfache Lösung, dass der $Bildbreite und die 1280 als Zahlenwert interpretiert.
Shell-frage und schon seit ner halben Ewigkeit keine Antwort? Sehr seltsam!! Irgendwelche Leute bekommen die Listenmails scheinbar immernoch nicht :-) In bash sollte es mit "if (( $Bildbreite < 1280 )) ;then..." gehen. Zur Erklärung: Alles in (( )) wird ,wie in man:bash unter "Arithmetic Evaluation" beschrieben, ausgewertet. In deinem Beispiel versucht die bash das als "Conditional Expression" auszuwerten. Wobei ich den unterschied zwischen [[ ]] und [ ] auch noch nicht ganz verstanden habe. mfg Axel
Joachim Kieferle wrote:
Hallo Liste,
trotz mehrerer Stunden ausprobieren bin ich nicht weitergekommen. Und zwar möchte ich Zahlenwerte in einer IF-Abfrage in einem Shell-Skript vergleichen und dann entsprechend agieren. Die Werte "BildBreite" und "BildHoehe" hole ich in Pixeln mit awk aus einer Datei.
Und nun möchte ich, wenn BildBreite oder BildGroesse > 1280 Pixel sind, die Bilder runterrechnen.
Schon für
if [ $Bildbreite < 1280 ]; then ..... verkleinere ......
if [ $((Bildbreite)) < 1280 ]; then .... Oder mit expr arbeiten. Grusz Mathias -- CU in www.meeloon.de --
Mathias Uebel, Mittwoch, 21. April 2004 16:09:
Joachim Kieferle wrote:
Hallo Liste,
trotz mehrerer Stunden ausprobieren bin ich nicht weitergekommen. Und zwar möchte ich Zahlenwerte in einer IF-Abfrage in einem Shell-Skript vergleichen und dann entsprechend agieren. Die Werte "BildBreite" und "BildHoehe" hole ich in Pixeln mit awk aus einer Datei.
Und nun möchte ich, wenn BildBreite oder BildGroesse > 1280 Pixel sind, die Bilder runterrechnen.
Schon für
if [ $Bildbreite < 1280 ]; then ..... verkleinere ......
if [ $((Bildbreite)) < 1280 ]; then ....
Oder mit expr arbeiten.
Oder ganz einfach: if [ $Bildbreite -lt 1280 ]; then ... Siehe auch: man test --> -lt, -gt, -eq, ... "[" ist nur ein Link auf "test" (also ein Programmaufruf), weshalb das Leerzeichen dahinter zum Abtrennen der Übergabe-Parameter nötig ist. Die schließende Klammer kann man IMHO auch weglassen, es liest sich dann aber doof, weil irgend was zu fehlen scheint. -- Gruß MaxX 8-) Hinweis 1: PMs an diese Adresse werden automatisch vernichtet. Hinweis 2: Bitte unbedingt beachten: http://www.suse-etikette.de.vu
Hallo, Am Wed, 21 Apr 2004, Joachim Kieferle schrieb:
Schon für
if [ $Bildbreite < 1280 ]; then
*grummel* Da sieht man mal wieder, wozu es fuehrt, wenn man [ verwendet, das dann fuer einen Teil der if-Syntax gehalten wird. Das ist nicht der Fall! if BEFEHLSLISTE; then BEFEHLE; [else BEFEHLE;] fi '[' ist der Befehl 'test', der sowohl als binary (/usr/bin/test, /usr/bin/[ (!)) als auch bei den meisten shells als "builtin" existiert. ==== $ help [ [: [ arg... ] This is a synonym for the "test" builtin, but the last argument must be a literal `]', to match the opening `['. ==== Also, fuer die bash: help test Und da steht drin, wie es geht: ==== arg1 OP arg2 Arithmetic tests. OP is one of -eq, -ne, -lt, -le, -gt, or -ge. Arithmetic binary operators return true if ARG1 is equal, not-equal, less-than, less-than-or-equal, greater-than, or greater-than-or-equal than ARG2. ==== Du sucht also nach: if test $Bildbreite -lt 1280; then -dnh -- If you haven't got time to RTFM, you haven't got time to whine on this mailing list.
Am Mittwoch, 21. April 2004 18:00 schrieb David Haller:
Hallo,
Am Wed, 21 Apr 2004, Joachim Kieferle schrieb:
Schon für
if [ $Bildbreite < 1280 ]; then
*grummel* Da sieht man mal wieder, wozu es fuehrt, wenn man [ verwendet, das dann fuer einen Teil der if-Syntax gehalten wird.
Wo wir gerade dabei sind. Ich schreibe meine Shell Skripte ganz gerne sh kompatibel, daher verwende ich gerne die ash dafür. Aber was ist das für eine komische Shell bei SuSE? Da wird behauptet, das sei die NetBSD /bin/sh. Aber die ist es definitiv nicht. Auch habe ich bei NetBSD noch nie was von Almquist gehört. Die SuSE ash kennt *keine* Arithmetic Expressions (( .. ))! Wie soll die denn /bin/sh ersetzen können!? Warum nimmt man nicht die richtige NetBSD sh (IMHO eine ksh)? 'Tschulljung, das mußte irgendwie raus... ;-) Wie macht ihr das denn, wenn ihr Skripte für /bin/sh schreiben wollt? Man kann doch nicht davon ausgehen, daß das eine bash ist?! Schon allein die Tatsache, daß sich die Bash-Buildins test und [ anders verhalten als die Versionen unter /bin/ irritiert mich oft. Das sollte doch eigentlich im POSIX Standard drin sein, oder? Martin
Martin Schmitz wrote:
Am Mittwoch, 21. April 2004 18:00 schrieb David Haller:
Hallo,
Am Wed, 21 Apr 2004, Joachim Kieferle schrieb:
Schon für
if [ $Bildbreite < 1280 ]; then
*grummel* Da sieht man mal wieder, wozu es fuehrt, wenn man [ verwendet, das dann fuer einen Teil der if-Syntax gehalten wird.
[ ..... viele Tips und Hilfe ] Hallo Jürgen, Mathias, Axel, Matthias, David und Martin, vielen Dank für Eure Hilfe und auch die ausführlichen Erläuterungen. Das finde ich das Tolle an dieser Liste. Und nach knapp 9 Jahren Solaris / Linux nebenher habe ich (gefühlt) mehr Fragen als zu Beginn .... . Viele Grüsse Joachim
Hallo, Am Wed, 21 Apr 2004, Martin Schmitz schrieb:
Am Mittwoch, 21. April 2004 18:00 schrieb David Haller:
*grummel* Da sieht man mal wieder, wozu es fuehrt, wenn man [ verwendet, das dann fuer einen Teil der if-Syntax gehalten wird.
Wo wir gerade dabei sind. Ich schreibe meine Shell Skripte ganz gerne sh kompatibel, daher verwende ich gerne die ash dafür. Aber was ist das für eine komische Shell bei SuSE? Da wird behauptet, das sei die NetBSD /bin/sh. Aber die ist es definitiv nicht. Auch habe ich bei NetBSD noch nie was von Almquist gehört. Die SuSE ash kennt *keine* Arithmetic Expressions (( .. ))!
Die originale ash auch und die bourne shell (/bin/sh) ebenfalls nicht! Das koennen nur POSIX-shells, wie die aktuelle bash oder ksh.
Wie soll die denn /bin/sh ersetzen können!? Warum nimmt man nicht die richtige NetBSD sh (IMHO eine ksh)?
pdksh? Das ist auch keine bourne shell sondern eine POSIX shell. Die kannst du nicht als Vergleich verwenden.
'Tschulljung, das mußte irgendwie raus... ;-) Wie macht ihr das denn, wenn ihr Skripte für /bin/sh schreiben wollt? Man kann doch nicht davon ausgehen, daß das eine bash ist?!
Und genausowenig eine ksh bzw. generell POSIX-shell. Die ash (die kein (( )) kann!) ist von den frei erhaeltlichen am naechsten an der Bourne shell dran. Also teste damit.
Schon allein die Tatsache, daß sich die Bash-Buildins test und [ anders verhalten als die Versionen unter /bin/ irritiert mich oft. Das sollte doch eigentlich im POSIX Standard drin sein, oder?
Verwechsle GNU/bash/POSIX test nicht miteinander. Die bash scheint aber GNU-Test als builtin zu verwenden (ich hab jetzt aber nicht alle tests verglichen). -dnh PS: liest du dcous? -- If you haven't got time to RTFM, you haven't got time to whine on this mailing list.
David Haller
Am Wed, 21 Apr 2004, Martin Schmitz schrieb:
Am Mittwoch, 21. April 2004 18:00 schrieb David Haller:
*grummel* Da sieht man mal wieder, wozu es fuehrt, wenn man [ verwendet, das dann fuer einen Teil der if-Syntax gehalten wird.
Wo wir gerade dabei sind. Ich schreibe meine Shell Skripte ganz gerne sh kompatibel, daher verwende ich gerne die ash dafür. Aber was ist das für eine komische Shell bei SuSE? Da wird behauptet, das sei die NetBSD /bin/sh. Aber die ist es definitiv nicht. Auch habe ich bei NetBSD noch nie was von Almquist gehört. Die SuSE ash kennt *keine* Arithmetic Expressions (( .. ))!
Die originale ash auch und die bourne shell (/bin/sh) ebenfalls nicht!
Das koennen nur POSIX-shells, wie die aktuelle bash oder ksh.
Naja, ich dachte, die bourne shell sei schon POSIX kompatibel gewesen. Jetzt habe ich nochmal nachgesehen. Was ich möchte, ist einfach POSIX Konformität (und das schließt IMHO (()) mit ein). Wie es aussieht, hat BSD tatsächlich mal irgendwann vor langer Zeit die ash anstatt der original AT&T sh genommen und um POSIX und etwas mehr erweitert. Immerhin gab's die neue /bin/sh dann schon in 44BSD. Wie SuSE darauf kommt, die Uralt-ash sei NetBSDs sh, ist mir ein Rätsel. Ach ja, und NetBSDs sh ist doch keine ksh, aber daran angelehnt. Eine pdksh (als ksh) wird aber auch mitgeliefert. Standardshell ist übrigens csh. ;-)
Wie soll die denn /bin/sh ersetzen können!? Warum nimmt man nicht die richtige NetBSD sh (IMHO eine ksh)?
pdksh? Das ist auch keine bourne shell sondern eine POSIX shell. Die kannst du nicht als Vergleich verwenden.
Naja, aber sowas vermisse ich bei SuSE. Eine kleine POSIX shell, die keine *zusätzlichen* Features mitbringt und sich als /bin/sh einsetzen läßt. Und wenn man dafür skriptet, dann sollte das überall laufen, wo es eine /bin/sh gibt, _zumindest_ wenn diese POSIX konform ist.
'Tschulljung, das mußte irgendwie raus... ;-) Wie macht ihr das denn, wenn ihr Skripte für /bin/sh schreiben wollt? Man kann doch nicht davon ausgehen, daß das eine bash ist?!
Und genausowenig eine ksh bzw. generell POSIX-shell. Die ash (die kein (( )) kann!) ist von den frei erhaeltlichen am naechsten an der Bourne shell dran. Also teste damit.
Vermutlich die beste Idee. Aber auf Arithmetic Expressions verzichten zu müssen ist schon hart. ;-) Ist /bin/test bzw. /bin/[ eigentlich auch in POSIX definiert.
PS: liest du dcous?
leider nein. Aber danke für die Infos. Martin
Hallo, Am Thu, 22 Apr 2004, Martin Schmitz schrieb:
David Haller
writes: Am Wed, 21 Apr 2004, Martin Schmitz schrieb:
Am Mittwoch, 21. April 2004 18:00 schrieb David Haller: [..] Die originale ash auch und die bourne shell (/bin/sh) ebenfalls nicht!
Das koennen nur POSIX-shells, wie die aktuelle bash oder ksh.
Naja, ich dachte, die bourne shell sei schon POSIX kompatibel gewesen.
Nein. Und ich bezweifle, ob's damals POSIX ueberhaupt schon gab. Die bourne ist doch aus den fruehen 70ern...
Jetzt habe ich nochmal nachgesehen. Was ich möchte, ist einfach POSIX Konformität (und das schließt IMHO (()) mit ein).
AFAIK ja. Wobei POSIX von den verschiedenen shells (bash, ksh, zsh) unterschiedlich vollstaendig implementiert und unterschiedlich erweitert wird... Wirklich verlassen kann man sich nur auf bourne- features. Wer mehr will, der sollte EXPLIZIT per '#!/bin/bash' o.ae. eine POSIX-shell anfordern.
Wie es aussieht, hat BSD tatsächlich mal irgendwann vor langer Zeit die ash anstatt der original AT&T sh genommen und um POSIX und etwas mehr erweitert. Immerhin gab's die neue /bin/sh dann schon in 44BSD.
Das war dann aber wohl schon keine bourne mehr, sondern die BSD shell.
Wie SuSE darauf kommt, die Uralt-ash sei NetBSDs sh, ist mir ein Rätsel.
Das kann ich nicht nachvollziehen: ==== COPYRIGHT Copyright 1989 by Kenneth Almquist. DESCRIPTION Ash is a version of sh with features similar to those of the System V shell. ==== $ rpm -qf `which ash` ash-0.2-151 $ rpm -q --queryformat "%{description}" -f `which ash` | head -2 NetBSD's ash (Almquist sh) for Linux is a small (62K - no job control) Bourne-compatible shell. Great for machines with Beachte: NetBSD sh != NetBSD ash
Ach ja, und NetBSDs sh ist doch keine ksh, aber daran angelehnt. Eine pdksh (als ksh) wird aber auch mitgeliefert. Standardshell ist übrigens csh. ;-)
Ja.
Wie soll die denn /bin/sh ersetzen können!? Warum nimmt man nicht die richtige NetBSD sh (IMHO eine ksh)?
pdksh? Das ist auch keine bourne shell sondern eine POSIX shell. Die kannst du nicht als Vergleich verwenden.
Naja, aber sowas vermisse ich bei SuSE. Eine kleine POSIX shell, die keine *zusätzlichen* Features mitbringt und sich als /bin/sh einsetzen läßt.
Das ist dann aber, genausowenig wie die bash, eine bourne-shell. Sinnvoller waere: 'ln -sf /bin/ash /bin/sh'.
Und wenn man dafür skriptet, dann sollte das überall laufen, wo es eine /bin/sh gibt, _zumindest_ wenn diese POSIX konform ist.
Ruft man die bash als sh auf (per symlink /bin/sh z.B.), dann verhaelt sie sich POSIX-konform (d.h. ohne GNU/Bash Erweiterungen). Such mal in man bash nach 'as sh' und 'posix'... Eine schlankere POSIX-shell als die bash (im POSIX-mode) ist wohl die pdksh.
Und genausowenig eine ksh bzw. generell POSIX-shell. Die ash (die kein (( )) kann!) ist von den frei erhaeltlichen am naechsten an der Bourne shell dran. Also teste damit.
Vermutlich die beste Idee. Aber auf Arithmetic Expressions verzichten zu müssen ist schon hart. ;-)
Musst du nicht. help 'let' (wobei das die ash wohl auch nicht kennt) und 'help expr'... $ ash -c 'echo `expr 1 + 1`' 2 Ausserdem gibt's da ja so nette Tools wie 'bc' und 'dc', die sich prima in der shell verwenden lassen... $ ash -c 'echo "ibase=8; obase=16; 755;" | bc' 273 $ ash -c 'echo "ibase=8; obase=2; 755;" | bc' 111101101 ^^^^^^^^^ rwxrwxrwx Ansonsten (s.u.): verwende einfach explizit(!) /bin/bash oder /bin/ksh oder was auch immer. Weil ich meist zu faul bin, auf bourne-Kompatibilitaet zu testen haben praktisch alle meine aktuelleren scripte (ausser trivialem Kram, der z.B. nur if, ps, grep und exec verwendet) als erste Zeile ein #! /bin/bash (oder '#! /usr/bin/gawk -f', oder '#! /usr/bin/sed -f' oder '#! /usr/bin/perl -w').
Ist /bin/test bzw. /bin/[ eigentlich auch in POSIX definiert.
Nein. /usr/bin/test aber. Wie's mit /usr/bin/[ aussieht weiss ich nicht, ich hab den symlink bei mir geloescht (IIRC). Krass aber das hier: feersum:~# ls -li /usr/bin/{test,[} 430386 -rwxr-xr-x 1 root root 29359 2004-03-29 16:03 /usr/bin/[ 430436 -rwxr-xr-x 1 root root 27577 2004-03-29 16:03 /usr/bin/test ^^^^^! *HAEHHHH???* Isch glaub, et hakt (nein, nicht die groesse, die sind ungestripped, das ist ok, aber dass das zwei unterschiedliche binaries sind!) Das ist die aktuellste SuSE, die ich hier im Zugriff habe... Bei meiner SuSE 6.2 (mein nach wie vor Hauptsystem) war /usr/bin/[ ein symlink auf /usr/bin/test. Ausserdem haben die POSIX shells wohl auch immer ein test-builtin: dh@slarty: ~ $ ksh -c 'type test' ### == pdksh 5.2.14 test is a shell builtin dh@slarty: ~ $ bash -c 'type test' ### == bash 2.03.0(1)-release test is a shell builtin dh@slarty: ~ $ sh -c 'type test' ### == bash --posix 2.03.0(1) test is a shell builtin dh@slarty: ~ $ zsh -c 'type test' ### zsh 3.0.5 test is a shell builtin dh@slarty: ~ $ ash -c 'type test' ### ash 0.2 type: not found ### sic! dh@slarty: ~ $ sash -c 'type test' ### sash 3.4 type: No such file or directory ### sic! dh@slarty: ~ $ sash -c 'which test' /usr/bin/test Achso, ne csh hab ich hier auch, die verwende ich aber nicht. Zumal man csh so oder so nur interaktiv verwenden sollte. Fazit: bourne != POSIX /bin/sh -> bash ~= POSIX != /bin/bash ash != POSIX ash != {bash,zsh,{,pd}ksh} ash ~= bourne csh != {bourne,POSIX,bash,sh,ash,zsh,*ksh*} Und ja, ich hab auch Erfahrung mit ner ksh != pdksh, genauer ner ksh von SunOS 5.x... Will man nicht unbedingt als interaktive shell. Genausowenig wie man, selbst als vitischist, den vi-mode der libreadline in der bash will. YMMV.
PS: liest du dcous?
leider nein. Aber danke für die Infos.
Tu das. Google in der Gruppe mal (in den letzten 3 Monaten) nach "POSIX"... -dnh PS: an alle: lest mal man -P'less +/^READLINE' bash bzw. uebersichtlicher: info readline -> Command Line Editing -> Readline Interaction das macht sich in der bash jederzeit nuetzlich, und wer dann mal den (X|GNU)Emacs ausprobieren will, der hat's nicht mehr schwer... -- If you haven't got time to RTFM, you haven't got time to whine on this mailing list.
Hallo David, hallo Leute, Am Donnerstag, 22. April 2004 05:28 schrieb David Haller:
Am Thu, 22 Apr 2004, Martin Schmitz schrieb:
David Haller
writes: Am Wed, 21 Apr 2004, Martin Schmitz schrieb:
Am Mittwoch, 21. April 2004 18:00 schrieb David Haller: [...] Ist /bin/test bzw. /bin/[ eigentlich auch in POSIX definiert.
Nein. /usr/bin/test aber. Wie's mit /usr/bin/[ aussieht weiss ich nicht, ich hab den symlink bei mir geloescht (IIRC).
Krass aber das hier: feersum:~# ls -li /usr/bin/{test,[} 430386 -rwxr-xr-x 1 root root 29359 2004-03-29 16:03 /usr/bin/[ 430436 -rwxr-xr-x 1 root root 27577 2004-03-29 16:03 /usr/bin/test ^^^^^! *HAEHHHH???* Isch glaub, et hakt (nein, nicht die groesse, die sind ungestripped, das ist ok, aber dass das zwei unterschiedliche binaries sind!)
Das ist die aktuellste SuSE, die ich hier im Zugriff habe...
Dann hat die einen Bug.
Bei meiner SuSE 6.2 (mein nach wie vor Hauptsystem) war /usr/bin/[ ein symlink auf /usr/bin/test.
Ist bei SuSE 9.0 immer noch so. [...]
Genausowenig wie man, selbst als vitischist, den vi-mode der libreadline in der bash will.
Wie bitte? Ich arbeite grundsätzlich im vi-mode, und wenn ich mal auf einem anderen System arbeiten darf/muss, ist das set -o vi einer meiner ersten Befehle - spätestens, wenn als Befehlszeile "kkk" dasteht, weil ich drei Befehle in der History zurückblättern wollte ;-) Ich weiß, dass Du (X-)Emacs verwendest und deshalb dessen Tastenkombinationen bevorzugst - das verstehe ich auch. Allerdings ist das noch lange kein Grund, den vi-mode der Bash so zu verteufeln. Übrigens: gerade _wegen_ Deines (Negativ-) Hinweises auf den vi-mode der Bash vor einiger Zeit bin ich erst darauf gekommen, dass es den überhaupt gibt und habe festgestellt, dass er mir deutlich besser gefällt als der emacs-mode. Der Schuss ist also nach hinten losgegangen ;-) Recht praktisch finde ich übrigens die Möglichkeit, die Befehlszeile in einem "kompletten" vi zu bearbeiten (Escape v). Gibt es das auch im emacs-mode?
PS: an alle: lest mal info readline -> Command Line Editing -> Readline Interaction das macht sich in der bash jederzeit nuetzlich, und wer dann mal den (X|GNU)Emacs ausprobieren will, der hat's nicht mehr schwer...
Ich empfehle stattdessen lieber set -o vi und die Lektüre der vi-Doku ;-) So, hoffentlich wird jetzt kein "command-line editing war" aus dieser Mail... *SCNR* und Gruß Christian Boltz --
http://www.bahn.de hat auch einen Routenplaner [...] auch für Fahrrad und zu Fuß, wenn die Entfernung nicht zu weit ist. Nur, was bedeutet "2. Klasse" auf dem Fahrrad? ;-) [> Bernd Brodesser und Ralf Cirksena in suse-linux]
Hallo, Am Fri, 23 Apr 2004, Christian Boltz schrieb:
Am Donnerstag, 22. April 2004 05:28 schrieb David Haller:
Am Thu, 22 Apr 2004, Martin Schmitz schrieb:
David Haller
writes: Am Wed, 21 Apr 2004, Martin Schmitz schrieb:
Am Mittwoch, 21. April 2004 18:00 schrieb David Haller: [...] Ist /bin/test bzw. /bin/[ eigentlich auch in POSIX definiert.
Nein. /usr/bin/test aber. Wie's mit /usr/bin/[ aussieht weiss ich nicht, ich hab den symlink bei mir geloescht (IIRC).
Krass aber das hier: feersum:~# ls -li /usr/bin/{test,[} 430386 -rwxr-xr-x 1 root root 29359 2004-03-29 16:03 /usr/bin/[ 430436 -rwxr-xr-x 1 root root 27577 2004-03-29 16:03 /usr/bin/test ^^^^^! *HAEHHHH???* Isch glaub, et hakt (nein, nicht die groesse, die sind ungestripped, das ist ok, aber dass das zwei unterschiedliche binaries sind!)
Das ist die aktuellste SuSE, die ich hier im Zugriff habe...
Dann hat die einen Bug.
Mag sein.
Bei meiner SuSE 6.2 (mein nach wie vor Hauptsystem) war /usr/bin/[ ein symlink auf /usr/bin/test.
Ist bei SuSE 9.0 immer noch so.
Oh gut.
[...]
Genausowenig wie man, selbst als vitischist, den vi-mode der libreadline in der bash will.
Wie bitte? Ich arbeite grundsätzlich im vi-mode, und wenn ich mal auf einem anderen System arbeiten darf/muss, ist das set -o vi einer meiner ersten Befehle - spätestens, wenn als Befehlszeile "kkk" dasteht, weil ich drei Befehle in der History zurückblättern wollte ;-)
Ich weiß, dass Du (X-)Emacs verwendest und deshalb dessen Tastenkombinationen bevorzugst - das verstehe ich auch. Allerdings ist das noch lange kein Grund, den vi-mode der Bash so zu verteufeln.
Hm. Also mit hat mehr als ein vitischist (IIRC mindenstens Bernd) gesagt, dass er den vi-mode auf der Kommandozeile (also den der libreadline) nicht leiden kann.
Übrigens: gerade _wegen_ Deines (Negativ-) Hinweises auf den vi-mode der Bash vor einiger Zeit bin ich erst darauf gekommen, dass es den überhaupt gibt und habe festgestellt, dass er mir deutlich besser gefällt als der emacs-mode. Der Schuss ist also nach hinten losgegangen ;-)
*g* Is mir wurscht, ehrlich gesagt. Du bist der aber auch der erste von dem ich das hoere.
Recht praktisch finde ich übrigens die Möglichkeit, die Befehlszeile in einem "kompletten" vi zu bearbeiten (Escape v). Gibt es das auch im emacs-mode?
Keine Ahnung. Ausser bei langen Here-Dokumenten oder '' ueber $viele Zeilen brauche ich das auch nie ($viele >= 5)... BTW: auch im vi-mode funktionieren mit (mindestens) C-k, C-u, C-w einige emacs-Kuerzel...
PS: an alle: lest mal info readline -> Command Line Editing -> Readline Interaction das macht sich in der bash jederzeit nuetzlich, und wer dann mal den (X|GNU)Emacs ausprobieren will, der hat's nicht mehr schwer...
Ich empfehle stattdessen lieber set -o vi und die Lektüre der vi-Doku ;-)
Das bzgl. info readline aber schon! Und wie gesagt: selbst vitischisten finden den emacs-mode auf der Kommandozeile meist besser bzw. den vi-mode untauglich. Ausserdem ist eine Teilmenge des emacs-mode auch in anderen shells vorhanden, so z.B. C-w, C-h, C-d u.a. in der ksh auf Solaris... Und dort gibt's z.B. keinen vi-mode (AFAIK). Auch fuer dich gilt also das obige, dass du dich zumindest mit den grundlegenden readline-im-emacs-mode Kuerzeln vertraut machen solltest -- die funktionieren meist eben auch dann noch, wenn (z.B. per ssh) weder Backspace noch Delete funktionieren. Wenn du aber den vi-mode der bash mehr magst: verwende ihn! -dnh -- If you haven't got time to RTFM, you haven't got time to whine on this mailing list.
Am Samstag, 24. April 2004 01:10 schrieb David Haller:
Am Fri, 23 Apr 2004, Christian Boltz schrieb: [...]
Wie bitte? Ich arbeite grundsätzlich im vi-mode, und wenn ich mal auf einem anderen System arbeiten darf/muss, ist das set -o vi einer meiner ersten Befehle - spätestens, wenn als Befehlszeile "kkk" dasteht, weil ich drei Befehle in der History zurückblättern wollte ;-)
Ich weiß, dass Du (X-)Emacs verwendest und deshalb dessen Tastenkombinationen bevorzugst - das verstehe ich auch. Allerdings ist das noch lange kein Grund, den vi-mode der Bash so zu verteufeln.
Hm. Also mit hat mehr als ein vitischist (IIRC mindenstens Bernd) gesagt, dass er den vi-mode auf der Kommandozeile (also den der libreadline) nicht leiden kann.
Das wird wohl wie immer Geschmackssache sein - mir gefällt z. B. das Suchen im vi-Modus deutlich besser als das in der bash. Und es gibt noch einen gewichtigen Grund, sich damit zu befassen: Der vi-Modus funktionierte bisher in jeder ksh auf jedem Unix, das ich unter den Fingern hatte. [...]
Und wie gesagt: selbst vitischisten finden den emacs-mode auf der Kommandozeile meist besser bzw. den vi-mode untauglich.
Diese Behauptung halte ich zumindest für unbewiesen - wie viele derartige Meinungen kennst Du denn?
Ausserdem ist eine Teilmenge des emacs-mode auch in anderen shells vorhanden, so z.B. C-w, C-h, C-d u.a. in der ksh auf Solaris... Und dort gibt's z.B. keinen vi-mode (AFAIK).
Falsch. set -o vi oder ksh -o vi funktionieren immer. Ich hab im Moment fast täglich Solaris unter den Fingern, glaubs mir ;) Jan
participants (9)
-
Axel Heinrici
-
Christian Boltz
-
David Haller
-
Dr. Jürgen Vollmer
-
Jan.Trippler@t-online.de
-
Joachim Kieferle
-
Martin Schmitz
-
Mathias Uebel
-
Matthias Houdek