View previous topic :: View next topic |
Author |
Message |
Finswimmer Bodhisattva
Joined: 02 Sep 2004 Posts: 5467 Location: Langen (Hessen), Germany
|
Posted: Thu Feb 14, 2008 9:01 pm Post subject: Bash: Inhalt von $1 als neue Variable nutzen |
|
|
Hi!
Ich möchte, dass ./test temp1 dazu führt, dass im Skript ein "echo $1" den Inhalt von $temp1 ausgibt.
Ich schaff das einfach nicht....
Tobi _________________ Bitte auf Rechtschreibung, korrekte Formatierung und Höflichkeit achten!
Danke |
|
Back to top |
|
|
blice Guru
Joined: 12 Feb 2005 Posts: 598 Location: D- 26188
|
Posted: Thu Feb 14, 2008 9:20 pm Post subject: |
|
|
Code: |
bodo@localhost ~/bashtest $ cat temp1.txt
Hallo Welt!
Dies ist nur ein file.
bodo@localhost ~/bashtest $ cat test
#!/bin/bash
echo $1 # gibt den übergabewert als "temp1" aus
cat $1 # gibt den inhalt mit cat aus (ACHTUNG! steuerzeichen erzeugen möglicherweise Chaos
bodo@localhost ~/bashtest $
|
chmod a+x test nicht vergessen
Code: |
bodo@localhost ~/bashtest $ ./test temp1.txt
temp1.txt
Hallo Welt!
Dies ist nur ein file.
bodo@localhost ~/bashtest $
|
das klappt auf allen lesbaren dateien auf die du rechte hast .. zb
Code: |
bodo@localhost ~/bashtest $ ./test /var/log/Xorg.0.log
/var/log/Xorg.0.log
X Window System Version 1.3.0
Release Date: 19 April 2007
X Protocol Version 11, Revision 0, Release 1.3
Build Operating System: UNKNOWN
Current Operating System: Linux localhost 2.6.22-gentoo-r5 #5 SMP Sat Sep 22 21:10:26 Local time zone must be set--see zic i686
.
.
. [geschnitten]
|
_________________ Gentoo seit 2004.3
Skype: bodokhan
SecondLife: Bodokhan Fall
Email: blice@gmx.de |
|
Back to top |
|
|
firefly Watchman
Joined: 31 Oct 2002 Posts: 5319
|
Posted: Thu Feb 14, 2008 9:26 pm Post subject: |
|
|
blice wrote: | Code: |
bodo@localhost ~/bashtest $ cat temp1.txt
Hallo Welt!
Dies ist nur ein file.
bodo@localhost ~/bashtest $ cat test
#!/bin/bash
echo $1 # gibt den übergabewert als "temp1" aus
cat $1 # gibt den inhalt mit cat aus (ACHTUNG! steuerzeichen erzeugen möglicherweise Chaos
bodo@localhost ~/bashtest $
|
chmod a+x test nicht vergessen
Code: |
bodo@localhost ~/bashtest $ ./test temp1.txt
temp1.txt
Hallo Welt!
Dies ist nur ein file.
bodo@localhost ~/bashtest $
|
das klappt auf allen lesbaren dateien auf die du rechte hast .. zb
Code: |
bodo@localhost ~/bashtest $ ./test /var/log/Xorg.0.log
/var/log/Xorg.0.log
X Window System Version 1.3.0
Release Date: 19 April 2007
X Protocol Version 11, Revision 0, Release 1.3
Build Operating System: UNKNOWN
Current Operating System: Linux localhost 2.6.22-gentoo-r5 #5 SMP Sat Sep 22 21:10:26 Local time zone must be set--see zic i686
.
.
. [geschnitten]
|
|
falsch verstanden (setzen sechs *g*)
er meinte folgendes:
Code: | $ export Temp1="Hallo"
$ ./test Temp1
Hallo
$ |
sprich der übergebene parameter ist wiederum eine env variable dessen inhalt er ausgeben möchte. _________________ Ein Ring, sie zu knechten, sie alle zu finden,
Ins Dunkel zu treiben und ewig zu binden
Im Lande Mordor, wo die Schatten drohn. |
|
Back to top |
|
|
firefly Watchman
Joined: 31 Oct 2002 Posts: 5319
|
Posted: Thu Feb 14, 2008 9:40 pm Post subject: Re: Bash: Inhalt von $1 als neue Variable nutzen |
|
|
Finswimmer wrote: | Hi!
Ich möchte, dass ./test temp1 dazu führt, dass im Skript ein "echo $1" den Inhalt von $temp1 ausgibt.
Ich schaff das einfach nicht....
Tobi |
Code: | TT=$(env | grep $1); echo ${TT/$1\=/}; |
dies funktioniert aber nur mit variablen, die per export in der aktuellen shell session "deklariert" wurden. _________________ Ein Ring, sie zu knechten, sie alle zu finden,
Ins Dunkel zu treiben und ewig zu binden
Im Lande Mordor, wo die Schatten drohn. |
|
Back to top |
|
|
Finswimmer Bodhisattva
Joined: 02 Sep 2004 Posts: 5467 Location: Langen (Hessen), Germany
|
Posted: Thu Feb 14, 2008 10:22 pm Post subject: |
|
|
Code: | realvar=$(echo \$$1)
for line in $(eval echo $realvar ); do
echo "$line"
done
|
So gehts nun. War aber ein großer Akt, bis das ging...
Tobi _________________ Bitte auf Rechtschreibung, korrekte Formatierung und Höflichkeit achten!
Danke |
|
Back to top |
|
|
Necoro Veteran
Joined: 18 Dec 2005 Posts: 1912 Location: Germany
|
Posted: Thu Feb 14, 2008 10:57 pm Post subject: |
|
|
Finswimmer wrote: | Code: | realvar=$(echo \$$1) |
|
Hier kann man ein echo einsparen realvar="\$$1" oder auch realvar='$'$1
Quote: | Code: | for line in $(eval echo $realvar ); do |
|
Auch hier macht das echo keinen Sinn ...
/edit: hmm ... vllt doch ... hab das letzte als $(eval $(echo $realvar)) gelesen ... sorry ^^ _________________ Inter Deum Et Diabolum Semper Musica Est.
Last edited by Necoro on Thu Feb 14, 2008 11:11 pm; edited 1 time in total |
|
Back to top |
|
|
mv Watchman
Joined: 20 Apr 2005 Posts: 6780
|
Posted: Thu Feb 14, 2008 11:10 pm Post subject: |
|
|
Finswimmer wrote: | Code: | realvar=$(echo \$$1) |
|
Code: | ./myscript "exploit_me; rm -rf *" |
Du suchst so etwas: Code: | eval "wert=\"\${${1}}\"" | (unter bash ginge es einfacher, aber warum schrottig programmieren, wenn es sauber geht?)
Edit: Auch das kann "exploited" werden!
Last edited by mv on Thu Feb 14, 2008 11:18 pm; edited 1 time in total |
|
Back to top |
|
|
Necoro Veteran
Joined: 18 Dec 2005 Posts: 1912 Location: Germany
|
Posted: Thu Feb 14, 2008 11:14 pm Post subject: |
|
|
mv wrote: | Finswimmer wrote: | Code: | realvar=$(echo \$$1) |
|
Code: | ./myscript "exploit_me; rm -rf *" |
Du suchst so etwas: Code: | eval "wert=\"\${${1}}\"" | (unter bash ginge es einfacher, aber warum schrottig programmieren, wenn es sauber geht?) |
So wie ich den code sehe, sollte der exploit nicht anwendbar sein (da er die variable nur in einer for schleife verwendet) - und er halt kein kein eval $1 macht _________________ Inter Deum Et Diabolum Semper Musica Est. |
|
Back to top |
|
|
mv Watchman
Joined: 20 Apr 2005 Posts: 6780
|
Posted: Thu Feb 14, 2008 11:20 pm Post subject: |
|
|
Necoro wrote: | So wie ich den code sehe, sollte der exploit nicht anwendbar sein (da er die variable nur in einer for schleife verwendet) |
Probier es aus. Der Eploit greift schon in der ersten Zeile...
Edit: Sorry. Du hast recht. |
|
Back to top |
|
|
Finswimmer Bodhisattva
Joined: 02 Sep 2004 Posts: 5467 Location: Langen (Hessen), Germany
|
Posted: Fri Feb 15, 2008 7:32 am Post subject: |
|
|
mv wrote: | Finswimmer wrote: | Code: | realvar=$(echo \$$1) |
|
Code: | ./myscript "exploit_me; rm -rf *" |
Du suchst so etwas: Code: | eval "wert=\"\${${1}}\"" | (unter bash ginge es einfacher, aber warum schrottig programmieren, wenn es sauber geht?)
Edit: Auch das kann "exploited" werden! |
Teste ich nachher.
BTW: Ich nutze die Bash.
Tobi _________________ Bitte auf Rechtschreibung, korrekte Formatierung und Höflichkeit achten!
Danke |
|
Back to top |
|
|
mv Watchman
Joined: 20 Apr 2005 Posts: 6780
|
Posted: Fri Feb 15, 2008 8:26 pm Post subject: |
|
|
Finswimmer wrote: | BTW: Ich nutze die Bash. |
M.E. ein Fehler: Wenn schon inkompatibel, dann lieber wirklich bequem (sprich: zsh).
Bei Bash und zsh gibt es indirekte Expansion: |
|
Back to top |
|
|
Finswimmer Bodhisattva
Joined: 02 Sep 2004 Posts: 5467 Location: Langen (Hessen), Germany
|
Posted: Fri Feb 15, 2008 11:12 pm Post subject: |
|
|
mv wrote: | Finswimmer wrote: | BTW: Ich nutze die Bash. |
M.E. ein Fehler: Wenn schon inkompatibel, dann lieber wirklich bequem (sprich: zsh).
Bei Bash und zsh gibt es indirekte Expansion: |
Ok. Wird nun OT, aber warum ist Bash ein Fehler?
Ich dachte immer das wäre DIE Standarshell?
Tobi _________________ Bitte auf Rechtschreibung, korrekte Formatierung und Höflichkeit achten!
Danke |
|
Back to top |
|
|
STiGMaTa_ch Veteran
Joined: 28 Dec 2004 Posts: 1686 Location: Rüti ZH / Schweiz
|
Posted: Sat Feb 16, 2008 12:09 am Post subject: |
|
|
Finswimmer wrote: | Ok. Wird nun OT, aber warum ist Bash ein Fehler?
Ich dachte immer das wäre DIE Standarshell? |
Ist sie auch... zumindest unter Linux Systemen. Andere Systeme verwenden lieber die Bourne Shell (Nicht zu verwechseln mit Bourne Again Shell!) oder nutzen C-Shell.
Aber eigentlich ist die Diskussion um "die beste Shell" genau so müssig und unsinnig wie die Diskussion um das beste Linux, das beste Betriebsystem, das beste File System oder den schönsten Busen.
Denn es gibt einfach keine beste "Irgendwas". Es gibt nur Anforderungen welche mal von diesem "Irgendwas" und mal von jenem "Irgendwas" besser abgedeckt werden.
Lieber Gruss
STiGMaTa _________________ Ich bin Schuldknappe. Das bedeutet ich bin immer an allem Schuld. Und das nicht zu knapp! | Der alltägliche Familienwahnsinn auf meinem BLOG |
|
Back to top |
|
|
mv Watchman
Joined: 20 Apr 2005 Posts: 6780
|
Posted: Sun Feb 17, 2008 1:07 pm Post subject: |
|
|
STiGMaTa_ch wrote: | Ist sie auch... zumindest unter Linux Systemen. |
Keineswegs. Das ist sie nur bei Gentoo, weil Portage (meint hier: den gesamten Portage-Baum) darauf eingeschossen ist.
Andere Distributionen sind wesentlich weniger freier bei der Wahl der Shell.
Wenn es so etwas wie eine Standardshell gibt, dann heißt diese POSIX-shell - das ist der einzige festgelegte Standard.
Quote: | Denn es gibt einfach keine beste "Irgendwas". Es gibt nur Anforderungen welche mal von diesem "Irgendwas" und mal von jenem "Irgendwas" besser abgedeckt werden. |
Das wäre bei Shells so, wenn sie disjunkt wären. Nun ist es aber so, dass zsh quasi eine Obermenge für die Features aller Shells darstellt. Wenn es einem also nicht auf Portabilität ankommt (und das heißt eben normalerweise: POSIX oder gar noch weniger), warum soll man dann nicht von allen verügbaren Features Gebrauch machen? bash ist da ein sehr merkwürdiger Kompromiss: Nicht kompatibel und trotzdem nicht mächtig. Man hat also von beiden Seiten nur die Nachteile... |
|
Back to top |
|
|
think4urs11 Bodhisattva
Joined: 25 Jun 2003 Posts: 6659 Location: above the cloud
|
Posted: Sun Feb 17, 2008 3:36 pm Post subject: |
|
|
mv wrote: | Andere Distributionen sind wesentlich weniger freier bei der Wahl der Shell. |
Und welche installieren standardmäßig etwas anderes als die bash? (Weiß ich wirklich nicht, bei allen (Linux-)Systemen an denen ich rumfingere ist bash installiert.) _________________ Nothing is secure / Security is always a trade-off with usability / Do not assume anything / Trust no-one, nothing / Paranoia is your friend / Think for yourself |
|
Back to top |
|
|
STiGMaTa_ch Veteran
Joined: 28 Dec 2004 Posts: 1686 Location: Rüti ZH / Schweiz
|
Posted: Sun Feb 17, 2008 6:25 pm Post subject: |
|
|
mv wrote: | STiGMaTa_ch wrote: | Ist sie auch... zumindest unter Linux Systemen. |
Keineswegs. Das ist sie nur bei Gentoo, weil Portage (meint hier: den gesamten Portage-Baum) darauf eingeschossen ist.
Andere Distributionen sind wesentlich weniger freier bei der Wahl der Shell. |
Wie Think4UrS11 schon sagte. Welche der grossen Distributionen benutzt als default etwas anderes als bash?
mv wrote: | Wenn es so etwas wie eine Standardshell gibt, dann heißt diese POSIX-shell - das ist der einzige festgelegte Standard. [...] bash ist da ein sehr merkwürdiger Kompromiss: Nicht kompatibel und trotzdem nicht mächtig. Man hat also von beiden Seiten nur die Nachteile... |
Wie kommst du darauf, dass bash nicht kompatibel ist?
Code: | man bash
[...]
Bash is intended to be a conformant implementation of the Shell and Utilities portion of the IEEE POSIX specification (IEEE
Standard 1003.1). Bash can be configured to be POSIX-conformant by default.
[...]
--posix
Change the behavior of bash where the default operation differs from the POSIX standard to match the standard (posix
mode).
[...]
When bash is started in posix mode, as with the --posix command line option, it follows the POSIX standard for startup files.
In this mode, interactive shells expand the ENV variable and commands are read and executed from the file whose name is the
expanded value. No other startup files are read.
[...]
|
Lieber Gruss
STiGMaTa _________________ Ich bin Schuldknappe. Das bedeutet ich bin immer an allem Schuld. Und das nicht zu knapp! | Der alltägliche Familienwahnsinn auf meinem BLOG |
|
Back to top |
|
|
think4urs11 Bodhisattva
Joined: 25 Jun 2003 Posts: 6659 Location: above the cloud
|
Posted: Sun Feb 17, 2008 7:05 pm Post subject: |
|
|
mv wrote: | Andere Distributionen sind wesentlich weniger freier bei der Wahl der Shell. |
Und weil es gerade ins Auge sticht - bedeutet dieser Satz nicht viel eher 'woanders ist die Auswahl noch kleiner' - war das vom Autor so gewollt?
STiGMaTa_ch wrote: | Aber eigentlich ist die Diskussion um "die beste Shell" genau so müssig und unsinnig wie die Diskussion um das beste Linux, das beste Betriebsystem, das beste File System oder den schönsten Busen. |
Welches davon paßt nicht in eine Diskussion zwischen Geeks? _________________ Nothing is secure / Security is always a trade-off with usability / Do not assume anything / Trust no-one, nothing / Paranoia is your friend / Think for yourself |
|
Back to top |
|
|
Max Steel Advocate
Joined: 12 Feb 2007 Posts: 2267 Location: My own world! I and Gentoo!
|
Posted: Sun Feb 17, 2008 7:17 pm Post subject: |
|
|
Quote: | Welches davon paßt nicht in eine Diskussion zwischen Geeks? |
das beste File System @Think
OnTopic:
Nunja, ich würde sagen, es hat schon einen Grund das die Bash die Standardshell ist.
Und es hat bestimmt auch einen Grund warum chroot als Standard nicht die Bash als standard nimmt.
Demnach, jo, ich bleib bei der BAsh. _________________ mfg
Steel
___________________
Heim-PC: AMD Ryzen 5950X, 64GB RAM, GTX 1080
Laptop: Intel Core i5-4300U, 16GB RAM, Intel Graphic
Arbeit-PC: Intel i5-1145G7, 16GB RAM, Intel Iris Xe Graphic (leider WSL2)
Last edited by Max Steel on Sun Feb 17, 2008 7:19 pm; edited 2 times in total |
|
Back to top |
|
|
firefly Watchman
Joined: 31 Oct 2002 Posts: 5319
|
Posted: Sun Feb 17, 2008 7:18 pm Post subject: |
|
|
Think4UrS11 wrote: | mv wrote: | Andere Distributionen sind wesentlich weniger freier bei der Wahl der Shell. |
Und weil es gerade ins Auge sticht - bedeutet dieser Satz nicht viel eher 'woanders ist die Auswahl noch kleiner' - war das vom Autor so gewollt?
STiGMaTa_ch wrote: | Aber eigentlich ist die Diskussion um "die beste Shell" genau so müssig und unsinnig wie die Diskussion um das beste Linux, das beste Betriebsystem, das beste File System oder den schönsten Busen. |
Welches davon paßt nicht in eine Diskussion zwischen Geeks? |
wenn ich tippen müsste, dann kann es sowas von gar nicht das Thema über "das beste Linux" sein *g* _________________ Ein Ring, sie zu knechten, sie alle zu finden,
Ins Dunkel zu treiben und ewig zu binden
Im Lande Mordor, wo die Schatten drohn. |
|
Back to top |
|
|
mv Watchman
Joined: 20 Apr 2005 Posts: 6780
|
Posted: Sun Feb 17, 2008 8:14 pm Post subject: |
|
|
Think4UrS11 wrote: | mv wrote: | Andere Distributionen sind wesentlich weniger freier bei der Wahl der Shell. |
Und welche installieren standardmäßig etwas anderes als die bash? (Weiß ich wirklich nicht, bei allen (Linux-)Systemen an denen ich rumfingere ist bash installiert.) |
Wie Du richtig bemerkt hast, habe ich mich oben vertippt. Es sollte natürlich "wesentlich freier" (oder: "wesentlich weniger einschränkend") heißen.
Meines Wissens hat Debian (und neuerdings möglicherweise auch Ubuntu) die dash als Default-Systemshell. Bei *BSD m.W. sowieso... |
|
Back to top |
|
|
mv Watchman
Joined: 20 Apr 2005 Posts: 6780
|
Posted: Sun Feb 17, 2008 8:17 pm Post subject: |
|
|
Max Steel wrote: | Nunja, ich würde sagen, es hat schon einen Grund das die Bash die Standardshell ist. |
Wie gesagt: "Standard" nur unter Gentoo. Der Grund ist der existierende Portage-Baum. baselayout-2 versucht nicht ohne Grund, von den bashismen endlich los zu kommen. |
|
Back to top |
|
|
mv Watchman
Joined: 20 Apr 2005 Posts: 6780
|
Posted: Sun Feb 17, 2008 8:24 pm Post subject: |
|
|
STiGMaTa_ch wrote: | Wie kommst du darauf, dass bash nicht kompatibel ist? |
Sie kann natürlich kompatiblen Code interpretieren (von ein paar exotischen Ausnahmen einmal abgesehen).
Aber wenn man nur kompatiblen Code schreibt, nimmt man besser die dash, weil die das dann wenigstens schneller interpretiert (und man nebenbei eine bessere Kontrolle hat, dass der Code wirklich kompatibel ist).
Die Frage kam aber im Zusammenhang mit Bash-Erweiterungen wie ${!VAR} auf, was eindeutig inkompatibel ist. Wenn man sich entschließt, so etwas zu benutzen, sollte man m.E. lieber gleich den Schritt zu einer wirklich mächtigeren Sprache machen...
Für eine interaktive Shell (also sprich: als login-Shell) gibt es eigentlich gar keinen Grund, nicht zsh zu nehmen. |
|
Back to top |
|
|
mv Watchman
Joined: 20 Apr 2005 Posts: 6780
|
Posted: Sun Feb 17, 2008 8:29 pm Post subject: |
|
|
Max Steel wrote: | Und es hat bestimmt auch einen Grund warum chroot als Standard nicht die Bash als standard nimmt. |
Wie meinen? Was hat chroot mit einer Shell zu tun?
Ich vermute, Du meinst so etwas wie su, sudo, dchroot. Die nehmen alle, was $SHELL liefert, starten also normalerweise die Shell, in der man sich gerade befindet; welche auch immer das ist... |
|
Back to top |
|
|
STiGMaTa_ch Veteran
Joined: 28 Dec 2004 Posts: 1686 Location: Rüti ZH / Schweiz
|
Posted: Sun Feb 17, 2008 11:44 pm Post subject: |
|
|
mv wrote: | STiGMaTa_ch wrote: | Wie kommst du darauf, dass bash nicht kompatibel ist? |
Sie kann natürlich kompatiblen Code interpretieren (von ein paar exotischen Ausnahmen einmal abgesehen).
Aber wenn man nur kompatiblen Code schreibt, nimmt man besser die dash, weil die das dann wenigstens schneller interpretiert (und man nebenbei eine bessere Kontrolle hat, dass der Code wirklich kompatibel ist). |
Um kompatiblen Code zu schreiben greife ich immer noch gerne auf das Buch Portable Shell Programming von Bruce Blinn (nur mal so als Tipp für interessierte ). Eines der Ziele dieses Buches ist es Zitat:
Quote: | This book can teach you how to build shell scripts that are portable across System V and BSD versions of UNIX, and will also work under Korn and POSIX shells. |
Ich bin mit den Tipps dieses Buches relativ gut gefahren um Scripts zu erstellen welche unter HP-UX 10.20, Solaris 8, Solaris 10 und Linux (diverse Hersteller) laufen sollten.
mv wrote: | Die Frage kam aber im Zusammenhang mit Bash-Erweiterungen wie ${!VAR} auf, was eindeutig inkompatibel ist. |
Stimmt schon. Aber darum heisst das ja auch Bash-Erweiterung
mv wrote: | Wenn man sich entschließt, so etwas zu benutzen, sollte man m.E. lieber gleich den Schritt zu einer wirklich mächtigeren Sprache machen...
Für eine interaktive Shell (also sprich: als login-Shell) gibt es eigentlich gar keinen Grund, nicht zsh zu nehmen. |
Und ob es den gibt. Der wichtigste Grund ist die Verbreitung. Die meisten Linuxer verwenden nunmal bash weil "Ihre" Distribution diese Shell als default verwendet hat. Und wir wissen wohl alle, wie schwer es ist, einem Menschen (falsche) Angewohnheiten auszutreiben...
Für den Otto Normal User spielt es doch gar keine Rolle ob die zsh besser ist als die bash. Für die vier Befehle die er einmal im Monat in der Shell eingeben muss reicht die bash völlig aus. Und der "versiertere" Linux Benutzer, der mal ein wenig mehr machen will und dabei Beispiele aus dem Internet holen will, ist froh, wenn er einfach loslegen kann. Das geht wiederum nur deshalb, weil vieles bash bezogen ist.
Ich persönlich benutze zum Beispiel deshalb die zsh nicht, weil ich bisher noch nie das Bedürfnis verspürt habe etwas anderes als die bash zu nutzen. Bisher konnte ich alle Probleme mit der bash lösen ohne irgendwelche "Wursteleien" produzieren zu müssen. Warum sollte ich also zur zsh wechseln wollen? Müsste ich mich die ganze Zeit über Unzulänglichkeiten aufregen, dann würde ich wohl sehr schnell nach alternativen ausschau halten. Aber Fakt ist nunmal, dass die Bash für den Alltäglichen Einsatz so schlecht gar nicht ist.
Versteh mich nicht falsch. Ich will damit nicht sagen, dass bash besser ist als die zsh. Ich will eigentlich nur damit sagen, dass sie vielleicht nicht alles richtig macht aber auch nicht so viel falsch. Und darauf kommt es an. Wir kennen schliesslich alle so ein Beispiel. Microsoft Windowd versus KDE/GNOME/XFCE und wie sie alle heissen. Jeder könnte sofort eine Unmenge an nachweislichen Gründen aufzeigen warum KDE/GNOME/WHATEVER besser ist als Microsofts Windows. Und doch benutzt immer noch einen Grossteil der Bevölkerung Windows und ist mehrheitlich ganz zufrieden damit.
Manchmal muss man der Schafherde einfach die normale Wiese zum grasen lassen, auch wenn es nebenann die besten Kräuterwiesen gäbe. In diesem Sinne "määääähe" ich weiter mein bash Umfeld ab . Aber wer weiss, vielleicht komme ich auch noch auf den zsh Geschmack
Lieber Gruss
STiGMaTa _________________ Ich bin Schuldknappe. Das bedeutet ich bin immer an allem Schuld. Und das nicht zu knapp! | Der alltägliche Familienwahnsinn auf meinem BLOG |
|
Back to top |
|
|
mv Watchman
Joined: 20 Apr 2005 Posts: 6780
|
Posted: Mon Feb 18, 2008 1:32 pm Post subject: |
|
|
STiGMaTa_ch wrote: | Um kompatiblen Code zu schreiben greife ich immer noch gerne auf das Buch[...] |
Zu wissen, was kompatibel ist, ist eine Sache. Versehentlich nicht etwas anderes zu benutzen, eine ganz andere. Ich war über mich selbst erstaunt, wieviele Fehler meine kompatibel geglaubten Skripte beim Umstieg bash->dash produziert haben. Sei es mal ein "&>/dev/null" statt eines ">/dev/null 2>&1" (das passiert mir jetzt nicht mehr), sei es mal ein Ausnutzen des nullglob-Features, oder sei es auch nur ein "shift" wenn kein Argument übergeben wurde (das übersieht man sehr leicht) - wenn einem die Shell nicht auf die Finger klopft, ist es schwer, sich solche Unarten abzugewöhnen.
Quote: | mv wrote: | Die Frage kam aber im Zusammenhang mit Bash-Erweiterungen wie ${!VAR} auf, was eindeutig inkompatibel ist. |
Stimmt schon. Aber darum heisst das ja auch Bash-Erweiterung |
Müsste eigentlich ebenfalls ksh/zsh-Erweiterung heißen, denn die haben das m.W. zuerst eingeführt.
Quote: | mv wrote: | Für eine interaktive Shell (also sprich: als login-Shell) gibt es eigentlich gar keinen Grund, nicht zsh zu nehmen. |
Und ob es den gibt. Der wichtigste Grund ist die Verbreitung. Die meisten Linuxer verwenden nunmal bash weil "Ihre" Distribution diese Shell als default verwendet hat. Und wir wissen wohl alle, wie schwer es ist, einem Menschen (falsche) Angewohnheiten auszutreiben... |
Die Argumente ziehen nicht, weil die zsh alles "versteht", was auch die bash versteht. Nur halt noch mehr. Also "umgewöhnen" muss man sich nicht.
Quote: | Und der "versiertere" Linux Benutzer, der mal ein wenig mehr machen will und dabei Beispiele aus dem Internet holen will, ist froh, wenn er einfach loslegen kann. Das geht wiederum nur deshalb, weil vieles bash bezogen ist. |
Wie gesagt: Das wird in zsh genauso gehen (es gibt zwar ein paar subtile Sachen, die anders laufen könnten, aber wenn man ein sehr komplexes Bash-Skript aus dem Internet hat, schreibt man am Anfang halt "#!/bin/bash" - deswegen braucht man nicht die interaktive Shell zu wechseln).
Quote: | Ich persönlich benutze zum Beispiel deshalb die zsh nicht, weil ich bisher noch nie das Bedürfnis verspürt habe etwas anderes als die bash zu nutzen. Bisher konnte ich alle Probleme mit der bash lösen ohne irgendwelche "Wursteleien" produzieren zu müssen. Warum sollte ich also zur zsh wechseln wollen? |
So hatte ich bis vor ein paar Monaten auch gedacht (und jahrelang mit bash gearbeitet), bis ich mir mal "einfach so" die zsh angeschaut habe. Gerade was die interaktive Bedienung angeht, weiß man gar nicht, was man alles mit der bash versäumt hat: mehr als bash-completion und einfache history und prompt expansion gibt es dort ja nicht. Keine farbigen Directories, in denen man scrollen und auf Tastendruck die Filenamen übernehmen kann, keine ausführbaren Directories und Extensions, kein rekursives Übergeben von Unterdirectories als Argumente, keine bequemen aliase innerhalb einer Zeile, keine Default-Handlung bei leeren Redirection-Kommandos, ...
Leider ist das meiste davon bei der zsh per Default nicht an, aber wenn man sich das einmal eingerichtet und daran gewöhnt hat, ärgert man sich wirklich über die Zeit, in der man sich mit den bash-workarounds behelfen musste.
Und wer schon mal etwas komplexere Skripte geschrieben hat, dem ist es sicher auch schon mal so gegangen, dass er ein Skript, das "eigentlich" ein Shell-Skript sein sollte in perl o.ä. geschrieben hat, nur weil er für eine Teilaufgabe mal assoziative Arrays o.ä. benötigt hat.
Quote: | Versteh mich nicht falsch. Ich will damit nicht sagen, dass bash besser ist als die zsh. Ich will eigentlich nur damit sagen, dass sie vielleicht nicht alles richtig macht aber auch nicht so viel falsch. Und darauf kommt es an. |
Gerade bei einer interaktiven Shell nicht nur. Da kommt es auch schon darauf an, wieviel unnötige Zeichen man für eine bestimmte Standard-Aufgabe tippen muss. Ob ich jetzt also Code: | for i in * do; mv -- "$i" "$i.bak" done
find . -name ".*" -prune -o -exec grep Bla {} +
cd x
emacs y.txt
Bla ... >/dev/null | tippen muss oder auch auch einfach Code: | for i in *; mv -- $i $i.bak
grep Bla **/*
x
y.txt
Bla ... NIL | schreiben kann, läppert sich in der täglichen Arbeit schon zusammen.
Quote: | Wir kennen schliesslich alle so ein Beispiel. Microsoft Windowd versus KDE/GNOME/XFCE und wie sie alle heissen. Jeder könnte sofort eine Unmenge an nachweislichen Gründen aufzeigen warum KDE/GNOME/WHATEVER besser ist als Microsofts Windows. |
Der Vergleich passt deswegen nicht, weil Windows wesentliche Funktionen hat, die bei unixoiden Systemen vollkommen anders funktionieren, oder für die es vielleicht nicht einmal einen Ersatz gibt.
Ein passenderer Vergleich wäre vielleicht notepad (=bash) gegenüber einem luxuriösen Editor: Laden/Speichern/on-screen editieren (=POSIX) und auch Blocks markieren/verschieben/löschen (=bash-completion, History-Mechanismus) funktioniert alles mit notepad, und wenn man noch keinen anderen Editor gesehen hat, vermisst man eigentlich nichts - alles Wichtige geht, und es ist auch nicht sehr schwer. Trotzdem wird man sich ärgern, sich jahrelang darauf beschränkt zu haben, wenn man auf einmal wirkliche Editoren sieht.
Damit das nicht allzu vielen Leuten so (wie mir) mit bash so geht, gebe ich diese Erkenntnis bei Gelegenheiten wie dieser gerne weiter,.
Quote: | Und doch benutzt immer noch einen Grossteil der Bevölkerung Windows und ist mehrheitlich ganz zufrieden damit. |
Und trotzdem wird man (zumindest befreundete) Leute darauf hinweisen, dass es etwas Besseres gibt (wobei man bei Windows aufgrund der anderen Funktionsweise diskutieren kann, was "besser" ist; bei zsh hingegen sehe ich diese Frage nicht, weil ein "Wechsel" keine wirklichen Nachteile aber viele Vorteile hat.) |
|
Back to top |
|
|
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
|