PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Kommandosubstitution?



moonlook
20.12.2002, 12:07
Hi,

ich würd gern mal erfahren (und zwar am besten genau und mit Beispiel), was Kommandosubstitution genau bedeutet.
Irgendwie finde ich leine vernünftige Erklärung für diesen Begriff beim Shellscripten.?(

Doomshammer
20.12.2002, 13:16
Kommandosubstitution ist das ausfuehren eines Kommandos (oder Kommandofolge) direkt in eine Variable.

Da ganze funktioniert so:

Alte (nicht mehr uebliche) Form: Backticks
varibale=`cat /proc/cpuinfo`;

Neue Form: $()
variable=$(cat /proc/cpuinfo);

moonlook
20.12.2002, 13:33
Verstehe ich richtig, das eine Abfolge wie z.B.:
ps aux | grep irgendwas
in einer Variable definiert werden kann und dann bei Benutzung der Variable die Abfolge.abgearbeitet wird?

Ist das alles?

Doomshammer
20.12.2002, 14:23
Das hast Du richtig verstanden:


doomy@nemesis:~$ blubb=$(ps ax | grep sshd | tail -2 | head -1 | awk '{print $1}')
doomy@nemesis:~$ echo $blubb
22743

moonlook
20.12.2002, 14:37
Mensch Doomshammer,
Du glaubst ja gar nicht, wie lang ich darüber nachgedacht und mir den Kopf zerbrochen hab!!!
So einfach, tststss..
:]!!REAL THNX, MAN!!:]

Doomshammer
20.12.2002, 15:22
No Prob.


export PAGER='cat' && man $(echo $SHELL | sed -e 's/.*\/\(.*\)/\1/') | grep -n 'command substitution' | awk '{print $1}' | sed -e 's/://'

Oder einfach das machen und in den Ausgegebenen Zeilen der man-pages Deiner Shell nachlesen ;)

moonlook
20.12.2002, 15:59
Das auch inner Shell-Manpage steht, hätt ich mir denken können. Nur ist die so fett, dass ich danach echt keine Verlangen hatte.
Aber wie kommst Du zu solch Konstrukten?
Ist Sed so gut nutzbar( regex & Co.)? Dann sollt ich mir den mal genauer anschauen.

Ein paar Tips währen nicht schlecht, was man als Doku mit einführenden Beispielen nutzen kann!

rup
21.12.2002, 19:27
Einfach nochmal zum Nachlesen:

http://www.linuxfibel.de/bash.htm#Kommandosubstitution

Doomshammer
24.12.2002, 10:08
Original geschrieben von moonlook
Aber wie kommst Du zu solch Konstrukten?
Das sind einfach ein paar Spielereien. Diese Einzeiler kann man auch auf anderem Weg loesen, aber es macht immer wieder Spass ein paar "komplexere" Konstrukte zu basteln. Macht auch im Perl viel Spass (siehe. Sig.) ;)


Original geschrieben von moonlook
Ist Sed so gut nutzbar( regex & Co.)? Dann sollt ich mir den mal genauer anschauen.
sed, (g)awk & Co. gehoeren eingentlich zu den Standardtools. die jeder beherrschen sollte, der Shell-Scripting unter *iX betreibt (IMHO)

Links, hab ich so keinen parat. Hab eigentlich alles aus den man-pages und meinen O'Reilly Buechern. Falls Du Fragen hast, versuch ich aber gern sie zu beantworten.

rup
24.12.2002, 11:39
sed oder awk, das ist IMHO Geschmackssache, beides muss man sicher nicht beherschen . Awk ist eine komplette Programmiersprache, allerdings sehr langsam.
Meist wird awk nur dazu verwendet innerhalb einer Zeile ein Textmuster zu suchen, die Zeile selbst findet man mit grep schneller.

rup
24.12.2002, 11:47
http://www.aip.de/~dieter/Documentation/Betriebssysteme/UNIX/sed und awk.pdf

Doomshammer
24.12.2002, 13:23
Original geschrieben von rup
sed oder awk, das ist IMHO Geschmackssache, beides muss man sicher nicht beherschen . Awk ist eine komplette Programmiersprache, allerdings sehr langsam.
Meist wird awk nur dazu verwendet innerhalb einer Zeile ein Textmuster zu suchen, die Zeile selbst findet man mit grep schneller.

grep gehoert ebenfalls zu den Tools die man beherrschen sollte. Ebenso sind auch Tools wie find oder die Shelleigenen Schleifenformen IMHO ein muss. Wer schnell und effizient in der Shell arbeiten und programmieren moechte, kommt da nicht drumrum.

Bsp:
Warum sollte ich ein C-Programm schreiben das mir Bestimmte Dateien loescht, wenn ich es mit den Standard-UNIX-Tools um laengen schneller erledigen kann.


find /usr/src/linux -name *.h -exec rm -f {} \;

moonlook
24.12.2002, 14:06
Thnx, Rup, das ist echt ein gutes Teil zur Einführung!
Füher hab ich mich immer gefragt, wozu die massenhaften Tools zur Textbearbeitung unter Unix/Linux gut sein sollen und hab das alles weit von mir geschoben.
Nach und nach brauche ich aber solche Tools wie sed, grep und Programmiersprachen wie awk/perl usw., um effizient auf der Konsole zu arbeiten, wie Doomshammer schon sagte.

Und gleich mit Shellscripten perfekt Aufgaben zu erledigen ist einfach nicht möglich, ohne solche o.g. Tools zu kennen.
Grundlagentraining nenn ich das und werds in nächster Zukunft auch betreiben.
Ich denk, dass mich das Ganze genau so anregen wird wie der vim, der immer noch jederzeit bei näherer Beschäftigung
Quell neuer Kenntnisse und Freude ist (Meinung aller Bekannten, die ich darauf gebracht habe, den vim als Standardedi zu präferieren):P
Um eventuellen Flamewars aus dem Wege zu gehen, gilt dies sicherlich auch für andere Edi's wie emacs&co;)

Alles in allem danke! Da hab ich dann erstma die nächsten Tage, Wochen genug zu tun.

Doomshammer
24.12.2002, 15:28
Original geschrieben von moonlook
Ich denk, dass mich das Ganze genau so anregen wird wie der vim, der immer noch jederzeit bei näherer Beschäftigung Quell neuer Kenntnisse und Freude ist (Meinung aller Bekannten, die ich darauf gebracht habe, den vim als Standardedi zu präferieren) :P

Nunja, vi(m) regelt ja nunmal auch! :)
http://doomshammer.ath.cx/~doomy/vi.jpg
http://doomshammer.ath.cx/~doomy/vim-html.jpg
http://doomshammer.ath.cx/~doomy/mutt.jpg (vim als Editor fuer mutt)