View previous topic :: View next topic |
Author |
Message |
musv Advocate
Joined: 01 Dec 2002 Posts: 3337 Location: de
|
Posted: Sat Sep 10, 2011 3:33 pm Post subject: [solved] Schleife in Bash mit führenden Nullen |
|
|
Hallo,
wenn man in der Bash eintippt:
bekommt man als Ergebnis:
Jetzt würde ich die Iterationsangaben gern durch Variablen ersetzen:
Code: | export $BLUBB="003"
echo {001..$BLUBB} |
Ausgabe ist dann:
Wie bekomm ich die gewünschte Iteration hin? Ach ja, die führenden Nullen sind mir wichtig. Ansonsten hätte der Weg über for i in `seq 1 3` funktioniert.
Last edited by musv on Sun Sep 11, 2011 5:49 pm; edited 1 time in total |
|
Back to top |
|
|
disi Veteran
Joined: 28 Nov 2003 Posts: 1354 Location: Out There ...
|
Posted: Sat Sep 10, 2011 4:09 pm Post subject: |
|
|
Das sollte funktionieren:
Code: | BLUBB=003; seq -s" " -f "%03g" $BLUBB |
_________________ Gentoo on Uptime Project - Larry is a cow
Last edited by disi on Sat Sep 10, 2011 9:06 pm; edited 1 time in total |
|
Back to top |
|
|
mv Watchman
Joined: 20 Apr 2005 Posts: 6747
|
Posted: Sat Sep 10, 2011 8:12 pm Post subject: |
|
|
Code: | eval "echo {001..$BLUBB}" |
Aber aufpassen, dass BLUBB wirklich nur Zahlen enthält und nicht zum Exploit führen kann, etwa durch vorheriges Ausführen des folgenden Codes:
Code: | case "${BLUBB}" in
*[^0-9]*) echo "BLUBB enthält nicht nur Ziffern"; exit 1;;
esac |
|
|
Back to top |
|
|
Knieper l33t
Joined: 10 Nov 2005 Posts: 846
|
Posted: Sun Sep 11, 2011 9:51 am Post subject: |
|
|
Code: | >bar=003
>echo {001..${bar}}
001 002 003 |
Allerdings zsh (mir ist immer noch unklar, wieso man die bash einsetzen sollte). _________________ Je dümmer desto Gnome/KDE. |
|
Back to top |
|
|
mv Watchman
Joined: 20 Apr 2005 Posts: 6747
|
Posted: Sun Sep 11, 2011 9:58 am Post subject: |
|
|
Knieper wrote: | (mir ist immer noch unklar, wieso man die bash einsetzen sollte) |
Volle Zustimmung: Entweder man will volle POSIX Kompatibilität - dann nimmt man die dash - oder man will Luxus - dann nimmt man die zsh. Ein Verzicht auf Kompatibilität ohne großen Luxusgewinn und dafür mit hohem Verlust an Geschwindigkeit und Speicher ergibt keinen Sinn |
|
Back to top |
|
|
musv Advocate
Joined: 01 Dec 2002 Posts: 3337 Location: de
|
Posted: Sun Sep 11, 2011 5:49 pm Post subject: |
|
|
Hab die Version von disi genommen. Vielen Dank.
Find ich klasse, dass man seq quasi als printf verunstalten kann. Wieder was gelernt. |
|
Back to top |
|
|
Knieper l33t
Joined: 10 Nov 2005 Posts: 846
|
Posted: Sun Sep 11, 2011 6:18 pm Post subject: |
|
|
mv wrote: | Knieper wrote: | (mir ist immer noch unklar, wieso man die bash einsetzen sollte) |
dafür mit hohem Verlust an Geschwindigkeit und Speicher ergibt keinen Sinn |
Dash nehme ich nur für portable Skripte und früher mal als login-Shell. Zwischen bash und zsh ist ressourcentechnisch kein wirklicher Unterschied, beide ungefähr 6·dash. Die Zeit, die man mit zsh spart, ist es wert zu wechseln. Noch lieber wäre mir allerdings eine komplette Neuentwicklung, statt dieser Stringschieberei mit inkonsistenten Parametern. _________________ Je dümmer desto Gnome/KDE. |
|
Back to top |
|
|
mv Watchman
Joined: 20 Apr 2005 Posts: 6747
|
Posted: Sun Sep 11, 2011 7:08 pm Post subject: |
|
|
Knieper wrote: | Zwischen bash und zsh ist ressourcentechnisch kein wirklicher Unterschied, beide ungefähr 6·dash. |
zsh benötigt bei mir nur etwa 70% des Speichers der bash und ist etwa doppelt so schnell (und damit ungefähr so schnell wie die dash):
Code: | zsh -c "for i in {1..10000}; do true | true; done" # 1.20s user 3.25s system 57% cpu 7.774 total
bash -c "for i in {1..10000}; do true | true; done" # 1.18s user 6.06s system 45% cpu 15.755 total |
|
|
Back to top |
|
|
Knieper l33t
Joined: 10 Nov 2005 Posts: 846
|
Posted: Sun Sep 11, 2011 7:46 pm Post subject: |
|
|
mv wrote: | zsh benötigt bei mir nur etwa 70% des Speichers der bash |
Bei mir etwas mehr, das ist log'weise konfigurationsabhängig.
Quote: | Code: | zsh -c "for i in {1..10000}; do true | true; done" # 1.20s user 3.25s system 57% cpu 7.774 total
bash -c "for i in {1..10000}; do true | true; done" # 1.18s user 6.06s system 45% cpu 15.755 total |
|
Code: | 0.39s user 2.38s system 50% cpu 5.465 total
0.75s user 4.12s system 24% cpu 19.612 total |
Solch einen Unterschied hätte ich nicht erwartet... _________________ Je dümmer desto Gnome/KDE. |
|
Back to top |
|
|
musv Advocate
Joined: 01 Dec 2002 Posts: 3337 Location: de
|
Posted: Sun Sep 11, 2011 7:57 pm Post subject: |
|
|
Knieper wrote: | (mir ist immer noch unklar, wieso man die bash einsetzen sollte) |
Gewohnheit
mv wrote: | Ein Verzicht auf Kompatibilität ohne großen Luxusgewinn und dafür mit hohem Verlust an Geschwindigkeit und Speicher ergibt keinen Sinn |
Die Geschwindigkeit spielt bei meinem Script nicht wirklich eine Rolle. Es soll einfach ein paar Dateien zählen und mir die fehlenden Parts ausgeben. Dafür reicht mir auch die Bash.
Zsh ist installiert. Aber ehrlichgesagt komm ich mit der zsh noch nicht wirklich klar. Hab mich halt an die Bash gewöhnt. |
|
Back to top |
|
|
mv Watchman
Joined: 20 Apr 2005 Posts: 6747
|
Posted: Sun Sep 11, 2011 8:55 pm Post subject: |
|
|
musv wrote: | Die Geschwindigkeit spielt bei meinem Script nicht wirklich eine Rolle. |
Das ist auch nur ein meist unwesentlicher von vielen anderen Nachteilen - oder sagen wir besser: mangelnden Vorteilen.
Quote: | Es soll einfach ein paar Dateien zählen und mir die fehlenden Parts ausgeben. Dafür reicht mir auch die Bash. |
"Reichen" täte mit Sicherheit auch die dash. Aber gerade so Array-Dinger gehen in der zsh oft mit ein oder zwei Operationen (mit geeigneten Flags), während Du in der Bash händisch verschachtelte Schleifen durchlaufen musst u.ä. - und selbst das nicht so flexibel geht, wie Du hier im Thread gesehen hast, weil die Expansions-Funktionen beschränkter sind.
Und was Gewohnheit betrifft: Außer, dass man sich bewusst sein sollte, dass sich Variablen aus Bash-Sicht automatisch wie Arrays verhalten (wenn Du sie nicht mit ${=VAR} ansprichst), verhält sich die zsh beim Programmieren eigentlich "abwärtskompatibel" zu bash, nur dass man i.W. Zugriff auf viele neue Möglichkeiten hat... |
|
Back to top |
|
|
disi Veteran
Joined: 28 Nov 2003 Posts: 1354 Location: Out There ...
|
Posted: Mon Sep 12, 2011 7:34 am Post subject: |
|
|
Ich habe Gestern mal meinen User und Root auf zsh in Gentoo umgestellt. Erstmal muss man eine vernuenftige .zshrc anlegen, damit man z.B. 'End','Home','Del' usw. benutzen kann, einen Alias fuer ls damit Farben angezeigt werden und dann diese tolle Sache eine farbige Gentoo PS1 zu bekommen
Dann habe ich geguckt und das hier gefunden:
http://zsh.sourceforge.net/FAQ/zshfaq02.html
Da habe ich mich gleich aufgemacht und konnte viele Einstellungen auf meinem FreeBSD csh uebernehmen
Folgendes funktioniert uebrigends einwandfrei in csh und zsh:
Code: | alias newcmd 'list of commands' |
Das Vervollstaendigen von Befehlsoptionen ist schon geil (ich glaube bash hat etwas aehnliches, aber hatte ich nie benutzt).
Ansonsten konnte ich kaum Unterschiede feststellen, habe aber auch nicht viel gemacht ausser Dateien kopiert... die kleinen Skripte die ich gebastelt habe (wie Ordner synchronisieren, Videos umwandeln, Systemoptionen aendern etc.) sind alle sehr simple und da habe ich sowieso #!/bin/sh angegeben.
/bin/sh hatte ich noch auf /bin/dash gelinkt, um zu sehen ob das System noch tut und alle Skripts laufen
Mal guggn... _________________ Gentoo on Uptime Project - Larry is a cow |
|
Back to top |
|
|
mv Watchman
Joined: 20 Apr 2005 Posts: 6747
|
Posted: Mon Sep 12, 2011 7:55 pm Post subject: |
|
|
disi wrote: | Das Vervollstaendigen von Befehlsoptionen ist schon geil (ich glaube bash hat etwas aehnliches, aber hatte ich nie benutzt). |
Ja, es gibt mittlerweile die bash-completion. Aber die ist schon sehr primitiv, sowohl aus Programmierersicht (beispielsweise müssen die Funktionen grundsätzlich für alle Kommandos in allen Shells geladen werden, weil es das Autoload-Konzept ("Nachladen bei Bedarf") in der bash nicht gibt) als auch aus Anwendersicht: Aus einem Menü auszuwählen statt nur eine Liste zu sehen, ist schon luxuriös. Großer Nachteil der zsh: Die Defaults sind besch...eiden. Man muss alles erst aktivieren. Als kleines Beispiel: In meiner zsh werden bei interaktiven Shells u.a. folgende Kommandos ausgeführt:
Code: | setopt noautocd autopushd cdablevars nochasedots nochaselinks
setopt pathdirs autonamedirs bashautolist promptsubst
setopt histignorealldups histreduceblanks histverify nohistexpand
setopt extendedglob histsubstpattern
setopt nodotglob nonomatch nonullglob numericglobsort noshglob
setopt mailwarning interactivecomments noclobber
setopt nobgnice nocheckjobs nohup longlistjobs monitor notify printexitvalue
NULLCMD=:
READNULLCMD=less
ttyctl -f
autoload -Uz is-at-least compinit
zstyle ':completion:*' list-colors ${(s.:.)LS_COLORS}
zstyle ':completion:*' completer _expand _complete _expand_alias
zstyle ':completion:*' menu select=1 # interactive
zstyle ':completion:*' original true
zstyle ':completion:*' remote-access false
zstyle ':completion:*' use-perl true
zstyle ':completion:*' verbose true
zstyle ':completion:*' select-prompt %SScrolling active: current selection at %p%s
zstyle ':completion:*' accept-exact-dirs true
zstyle ':completion:*' path-completion false
zstyle ':completion:*' squeeze-slashes true
if is-at-least 4.3.10
then zstyle ':completion:*' format "%B%F{yellow}%K{blue}%d%k%f%b"
else zstyle ':completion:*' format "%B%d%b"
fi
compinit -D -u |
Vieles ist natürlich Geschmackssache (gerade die Optionen bitte nicht unverstanden übernehmen: Einige Defaults habe ich Bash-ähnlich gemacht, weil ich mich in einigen Punkten nicht umgewöhnen wollte).
Nur ein Beispiel für dieses Setting "cp [3 x Tab]" - und schon kann man aus einem colorierten Directory-Listing mit Cursortasten die Files auswählen (hoffe ich - ev. benötigt man noch einige "bindkey"-Kommandos dazu, die ich jetzt nicht alle hier kopieren wollte...) |
|
Back to top |
|
|
Necoro Veteran
Joined: 18 Dec 2005 Posts: 1912 Location: Germany
|
Posted: Mon Sep 12, 2011 8:22 pm Post subject: |
|
|
Nett an der zsh (u.a.): VCS-Informationen (zB SVN, hg, bzr, git, ...) im Prompt (Screenshot). Insbesondere für "auf welchem Branch bin ich gerade" und "gibt es uncommittete / nicht indizierte (git) Änderungen" (zB das "*" und das "U" auf dem Screenshot).
For the interested non-googler: Mein dazu benutzter Code:
Code: | # vcs stuff for prompt
setopt prompt_subst
if [[ $ZSH_VERSION == 4.3.<->* ]]; then
autoload -Uz vcs_info
zstyle ":vcs_info:*" enable bzr cvs svn git hg
zstyle ":vcs_info:*" formats "%B%{$fg[yellow]%}[%{$fg[green]%}(%u%c) %{$fg[yellow]%}%b:%1.7i%f%%b (%s)%B%{$fg[yellow]%}]%f%%b"
zstyle ":vcs_info:*" branchformat "%b"
zstyle ":vcs_info:*" get-revision true
zstyle ":vcs_info:*" check-for-changes true
zstyle ":vcs_info:*" max-exports 1
# hg stuff
zstyle ":vcs_info:hg:*" unstagedstr '*'
zstyle ":vcs_info:hg:*" hgrevformat '%r'
# bzr stuff
zstyle ":vcs_info:bzr:*" unstagedstr '*'
zstyle ":vcs_info:bzr:*" use-simple true
RPROMPT='${vcs_info_msg_0_:+"${vcs_info_msg_0_} "}'"${RPROMPT}"
else
vcs_info () {} # dummy
fi
# ...
precmd()
{
echo -ne "\033]0;${USER}@$(hostname):${PWD/$HOME/~}\007";
promptnl
vcs_info # <-- die einzig wichtige Zeile
} |
(Mehr ZSH-Anregungen hab ich dort: https://git.necoro.eu/dotfiles.git/tree/.zsh ) _________________ Inter Deum Et Diabolum Semper Musica Est. |
|
Back to top |
|
|
disi Veteran
Joined: 28 Nov 2003 Posts: 1354 Location: Out There ...
|
|
Back to top |
|
|
Yamakuzure Advocate
Joined: 21 Jun 2006 Posts: 2284 Location: Adendorf, Germany
|
Posted: Tue Sep 13, 2011 9:59 am Post subject: |
|
|
Ja, die zsh ist toll. Nur schade das (schon wieder) ein Thread mit zsh-fan-werbe-blablah zugemüllt wurde. Entschuldigt euch wenigstens beim OP. Völlig egal ob ihr Recht habt, oder nicht. Schon wieder so ein unpassendes Gelaber wie unglaublich schlecht die Bash doch sei (schon klar) nervt. Egal um wie viele Längen die zsh besser ist. Wenn man das, was an der zsh besser ist nicht benötigt, ist es sowas von Wurscht. Und damit einen Thread, in dem es um etwas völlig Anderes geht vollzuschwallern ist einfach extrem unhöflich. _________________ Important German:- "Aha" - German reaction to pretend that you are really interested while giving no f*ck.
- "Tja" - German reaction to the apocalypse, nuclear war, an alien invasion or no bread in the house.
|
|
Back to top |
|
|
SkaaliaN Veteran
Joined: 21 Apr 2005 Posts: 1360 Location: Valhalla
|
Posted: Tue Sep 13, 2011 10:30 am Post subject: |
|
|
Naja..als Info ist es ja ganz nett. Ansonsten einfach einen ZSH Werbe und Fanthread eröffnen und los gehts ! _________________ c'ya !
skaalian |
|
Back to top |
|
|
Knieper l33t
Joined: 10 Nov 2005 Posts: 846
|
Posted: Tue Sep 13, 2011 11:21 am Post subject: |
|
|
Yamakuzure wrote: | Entschuldigt euch wenigstens beim OP. |
Dh. Du willst aus einem solved-Thema mit Alternativvorschlägen einen Metameckerthread machen? Sehr geistreich. _________________ Je dümmer desto Gnome/KDE. |
|
Back to top |
|
|
mv Watchman
Joined: 20 Apr 2005 Posts: 6747
|
Posted: Tue Sep 13, 2011 7:38 pm Post subject: |
|
|
Yamakuzure wrote: | Entschuldigt euch wenigstens beim OP. [...] Schon wieder so ein unpassendes Gelaber |
Entschuldigung? Unpassendes Gelaber? Weil anstelle des von mir vorgeschlagenen Bash-Würgarounds eine funktionierende Lösung ohne Sicherheitsprobleme vorgeschlagen wurde?
Quote: | Wenn man das, was an der zsh besser ist nicht benötigt, |
...dann hat man sehr wenig Erfahrung mit der Shell, und es schadet dann erst recht nicht, eine Shell zu nehmen, in der einfach mehr geht. Im Zweifelsfall besteht der "Verlust" darin, dass man dann eine Shell benutzt, die einfach nur schneller ist.
xlayre wrote: | Ansonsten einfach einen ZSH Werbe und Fanthread eröffnen |
Einen solchen gibt es. Das Problem bei solchen Threads ist aber, dass ihn nur Leute lesen, die die zsh sowieso schon benutzen. Andere Leute (so wie ich früher auch) schauen in einen solchen Thread nicht hinein und stoppseln weiter mit der bash rum, unwissend, dass es viel Besseres gibt. Ich möchte anderen halt den Frust ersparen, den ich nach Jahren Bash hatte, als ich entdeckte, dass die zsh alles gekonnt hätte, was mich gestört hatte, dies aber nur nicht per Default-Konfiguration aktiviert war.
Jetzt wird es aber wirlich OT. |
|
Back to top |
|
|
SkaaliaN Veteran
Joined: 21 Apr 2005 Posts: 1360 Location: Valhalla
|
Posted: Wed Sep 14, 2011 6:50 am Post subject: |
|
|
Ich kann sowieso nicht nachvollziehen, was die ständigen Gnome/KDE, zsh/bash u.s.w. Flamewars bringen sollen. Streitet euch doch nicht über unsinne Kleinigkeiten.
Ich werde die zsh auch mal ausprobieren. Nur weil ich bisher die bash genutzt habe, ist die zsh kein No-Go. _________________ c'ya !
skaalian |
|
Back to top |
|
|
Knieper l33t
Joined: 10 Nov 2005 Posts: 846
|
Posted: Wed Sep 14, 2011 7:15 am Post subject: |
|
|
xlayre wrote: | Streitet euch doch nicht über unsinne Kleinigkeiten. |
Hast Du ein anderes Thema gelesen? Hier streitet doch niemand. Es wurde nur eine bessere Lösung propagiert und eine Shell, die einem viel Arbeit abnimmt. _________________ Je dümmer desto Gnome/KDE. |
|
Back to top |
|
|
SkaaliaN Veteran
Joined: 21 Apr 2005 Posts: 1360 Location: Valhalla
|
Posted: Wed Sep 14, 2011 7:20 am Post subject: |
|
|
Knieper wrote: | Hast Du ein anderes Thema gelesen? Hier streitet doch niemand. Es wurde nur eine bessere Lösung propagiert und eine Shell, die einem viel Arbeit abnimmt. |
Yamakuzure wrote: | Entschuldigt euch wenigstens beim OP. [...] Schon wieder so ein unpassendes Gelaber |
Der ganze Post war zumindest zänkisch geschrieben. Vielleicht hast du ihn ja auch nur überlesen / nicht ganz gelesen. _________________ c'ya !
skaalian |
|
Back to top |
|
|
|