also, da slackware nicht soviel mit automatisierung am hut hat, wollte ich ein kleines shell script basteln was mir das updaten/installieren etc. von slackware packages erleichtern soll:
#!/bin/bash
if [ ! -f /etc/suchepkg/CHECKSUMS ]; then
echo "First make pkg_update -update to update your checksums!"
else
cd /etc/suchepkg
export paket='grep $1.tgz CHECKSUMS'
fi
mein problem ist jetzt bei dem export paket...
weis da zufaellig grad wer die syntax damit er das annimmt?
danke im vorraus
oliver
kleines shell script
Re: kleines shell script
Ich denke, statt der Apostrophe '' hattest Du die Backticks `` verwenden wollen. Wenn Du schon die bash verwendest, würde ich die alternative Schreibweise $() empfehlen. So wird aus der export-Zeile dann <blockquote><pre><font size="1" face="">code:</font><hr><font face="Courier New" size="2">
export paket=$(grep "$1\<!--no-->\<!--no-->.tgz" CHECKSUMS)</font><hr></pre></blockquote>Der Punkt wird von grep übrigens als "genau ein beliebiges Zeichen" interpretiert werden und sollte daher wie o.a. entwertet werden. Es müssen aber zwei Backslashes sein, Weil die Shell noch eines entfernt (Backslash ist nun mal sowohl Sonderzeichen der Shell als auch der Regulären Ausdrücke).
Jochen
export paket=$(grep "$1\<!--no-->\<!--no-->.tgz" CHECKSUMS)</font><hr></pre></blockquote>Der Punkt wird von grep übrigens als "genau ein beliebiges Zeichen" interpretiert werden und sollte daher wie o.a. entwertet werden. Es müssen aber zwei Backslashes sein, Weil die Shell noch eines entfernt (Backslash ist nun mal sowohl Sonderzeichen der Shell als auch der Regulären Ausdrücke).
Jochen
Re: kleines shell script
hio,
es kommt zumindest kein fehler
aber leider gehts nicht :/
oliver
es kommt zumindest kein fehler
aber leider gehts nicht :/
oliver
Re: kleines shell script
Geht nicht gibt's nicht! <img src="http://www.pl-forum.de/UltraBoard/Images/Happy.gif" border="0" align="middle"> Vor allem deswegen, weil es als "Fehlerbericht" etwas ungenau ist. Was willst Du denn genau erreichen? Aus dem Skript lässt sich nur ersehen, dass Du aus der Datei /etc/suchepkg/CHECKSUMS eine Zeile (mehrere Zeilen?) herausgreppen willst, in denen "<übergebener Paketname>.tgz" vorkommt und diese Zeile einer Variablen "paket" zugeordnet werden soll. Ob es das Skript so tut, kannst Du auch durch ein "echo $paket" nach der export-Zeile testen.
So weit, so gut. Und dann? Meine Kristallkugel ist leider zienlich trübe...
Aber wenn ich jetzt mal tippen müsste... Da Du explizit die Variable "paket" exportierst, willst Du sie entweder in einem untergeordneten Skript verwenden - was vollkommen OK ist - oder, wie es häufig missverstanden wird, an ein übergeordnetes Skript zurückgeben. Das funktioniert so nicht.
Aber mehr tippe ich erst, wenn Du mal den gesamten Zusammenhang klar gemacht hast: Zielsetzung, erwartetes Ergebnis, andere Skripte drum herum usw.
Jochen
So weit, so gut. Und dann? Meine Kristallkugel ist leider zienlich trübe...
Aber wenn ich jetzt mal tippen müsste... Da Du explizit die Variable "paket" exportierst, willst Du sie entweder in einem untergeordneten Skript verwenden - was vollkommen OK ist - oder, wie es häufig missverstanden wird, an ein übergeordnetes Skript zurückgeben. Das funktioniert so nicht.
Aber mehr tippe ich erst, wenn Du mal den gesamten Zusammenhang klar gemacht hast: Zielsetzung, erwartetes Ergebnis, andere Skripte drum herum usw.
Jochen
Re: kleines shell script
also,
ich habs nich so mit sh scripting, hab nur absolute basics drauf, deswegen hab ich ein paar scripts gebaut die mir die packetverwaltung unter slackware vereinfachen sollen...
einmal ein "suchepkg" - dass das paket sucht zb.:
suchepkg qt
dann soll zb. qt-3.1.1copy.tgz rauskommen
das soll dann sofort runtergeladen werden soll (deswegen mit export damit ich dann wget ftp://ftp.slackware.at/$paket machen kann).
ich habs nich so mit sh scripting, hab nur absolute basics drauf, deswegen hab ich ein paar scripts gebaut die mir die packetverwaltung unter slackware vereinfachen sollen...
einmal ein "suchepkg" - dass das paket sucht zb.:
suchepkg qt
dann soll zb. qt-3.1.1copy.tgz rauskommen
das soll dann sofort runtergeladen werden soll (deswegen mit export damit ich dann wget ftp://ftp.slackware.at/$paket machen kann).
Re: kleines shell script
Dann ist das Exportieren erst einmal überflüssig. Tipp mal in einer Shell<pre>VAR=inhalt ; echo $VAR</pre>ein, dass funktioniert schliesslich auch ohne Exportieren, nicht wahr? Setze Dein wget einfach hinten an das Skript dran!
<blockquote><pre><font size="1" face="">code:</font><hr><font face="Courier New" size="2">#!/bin/bash
if [ ! -f /etc/suchepkg/CHECKSUMS ]; then
echo "First make pkg_update -update to update your checksums!"
else
cd /etc/suchepkg
export paket=$(grep "$1.*\<!--no-->.tgz" CHECKSUMS)
fi
wget ftp://ftp.slackware.at/$paket
</font><hr></pre></blockquote>
Probleme bei der Sache:
- Du hast keinerlei Fehlercheck da drinne. Wenn kein Treffer in der CHECKSUMS gefunden wird, ist $paket leer und wget wird Dir was husten.
- Das Format der CHECKSUMS-Datei ist mir nicht bekannt. Wenn da mehr als nur ein Dateiname pro Zeile drin steht, wird auch wieder bei wget ein so nicht existierender Dateiname zusammengesetzt.
- Was, wenn mehr als nur ein Treffer gefunden wird? Dann stehen alle Zeilen zusammen in $paket. Die müsste man einzeln bearbeiten, da sonst bei wget wieder die Syntax nicht eingehalten wird.
- Der Regexp bei grep muss anders aussehen. Wenn man mal annimmt, dass es reichen soll, den Anfang eines Paketnamens zu übergeben, dann mus wie o.a. noch ein ".*" eingefügt werden, da sonst nur der exakte Dateiname passen würde. (Beispiel: Bei Übergabe "qt" suchte Dein Skript nur nach "qt\<!--no-->.tgz", was nicht gefunden wurde. Statt dessen muss es nach "qt.*\<!--no-->.tgz" suchen, damit wie gewünscht auch "qt-3.1.1copy.tgz" gefunden wird.)
Da solltest Du Dir also noch mal Gedanken drüber machen...
Jochen
<blockquote><pre><font size="1" face="">code:</font><hr><font face="Courier New" size="2">#!/bin/bash
if [ ! -f /etc/suchepkg/CHECKSUMS ]; then
echo "First make pkg_update -update to update your checksums!"
else
cd /etc/suchepkg
export paket=$(grep "$1.*\<!--no-->.tgz" CHECKSUMS)
fi
wget ftp://ftp.slackware.at/$paket
</font><hr></pre></blockquote>
Probleme bei der Sache:
- Du hast keinerlei Fehlercheck da drinne. Wenn kein Treffer in der CHECKSUMS gefunden wird, ist $paket leer und wget wird Dir was husten.
- Das Format der CHECKSUMS-Datei ist mir nicht bekannt. Wenn da mehr als nur ein Dateiname pro Zeile drin steht, wird auch wieder bei wget ein so nicht existierender Dateiname zusammengesetzt.
- Was, wenn mehr als nur ein Treffer gefunden wird? Dann stehen alle Zeilen zusammen in $paket. Die müsste man einzeln bearbeiten, da sonst bei wget wieder die Syntax nicht eingehalten wird.
- Der Regexp bei grep muss anders aussehen. Wenn man mal annimmt, dass es reichen soll, den Anfang eines Paketnamens zu übergeben, dann mus wie o.a. noch ein ".*" eingefügt werden, da sonst nur der exakte Dateiname passen würde. (Beispiel: Bei Übergabe "qt" suchte Dein Skript nur nach "qt\<!--no-->.tgz", was nicht gefunden wurde. Statt dessen muss es nach "qt.*\<!--no-->.tgz" suchen, damit wie gewünscht auch "qt-3.1.1copy.tgz" gefunden wird.)
Da solltest Du Dir also noch mal Gedanken drüber machen...
Jochen