busybox 1.2.1 und awk

Seticruncher

Neuer User
Mitglied seit
12 Jun 2008
Beiträge
3
Punkte für Reaktionen
0
Punkte
0
Hallo erstmal an alle.

Ich sitze hier und schreibe ein Script das mir immer den letzten Podcast aus dem Netz ziehen soll. Im Grunde funktioniert es, zumindestens auf meine PC.
ich lade das Script auf den Stick der an der FritzBox hängt und starte es über eine Telnetsitzung. Es lädt mir brav die rss-feed datei runter und danach kommt folgende Fehlermeldung:

Code:
rss.sh: rss.sh: 21: awk: not found
rss.sh: rss.sh: 22: awk: not found
rss.sh: rss.sh: 22: awk: not found

gebe ich busybox ein erhalte ich als Versionsnummer:
BusyBox v1.2.1 (2006.09.12-21:53+0000) multi-call binary
Darin ist awk einhalten.

gebe ich awk --help als Kommando ein gibt er mir das aus:
-sh: awk: not found

Nehme ich als Kommando aber busybox awk --help kommt richtig:
BusyBox v1.2.1 (2006.09.12-21:53+0000) multi-call binary

Usage: awk [OPTION]... [program-text] [FILE ...]

Options:
-v var=val assign value 'val' to variable 'var'
-F sep use 'sep' as field separator
-f progname read program source from file 'progname'

Ich komme nicht dahinter warum das awk in meinem Script nicht benutz wird.
Zum leichterem Verständniss hier das kompltte Script:

Code:
#!/bin/bash
#
# Script zum Podcast download 
# V0.1 created by SetiCruncher
#
clear
# Variablen
USB_RSS=/var/media/ftp/MassStorageDevice-Partition-0-1/podcast
USB_FILES=/var/media/ftp/MassStorageDevice-Partition-0-1/files
# Test ob Ordner da ist, wenn nicht wird er angelegt
if test -r $USB_RSS -a -d $USB_RSS
	then
		echo
	else
		mkdir $USB_RSS
fi

# RSS-XML Daten holen und letzten Podcast als Variable speichern
cd $USB_RSS
wget http://der-duebel.podspot.de/rss
DATEI=$(grep "<enclosure url="  rss |  sed -n '1,1p' | awk -F'"' '{print $2}')
DATEINAME=$(grep "<enclosure url="  rss |  sed -n '1,1p' | awk -F'"' '{print $2}' | awk -F/ '{print $5}')

#Podcast Download und Speicherung 
if test -f $USB_RSS/$DATEINAME
	 then
		echo "Datei $DATEINAME ist schon vorhanden und wird übersprungen"
		rm rss
	 else
		 wget $DATEI
		rm rss		
fi
exit 0

Achso, ich habe das original busybox mit mount --bind /var/tmp/busybox /bin/busybox erstetzt da das original kein awk hat.
 
Dir fehlt dann der Link für awk (denn das hat die original busybox ja nicht), der für alle BB-Programme auf die BB gesetzt wird. Da das Verzeichnis im Flash liegt, könntest du als einfachsten Workaround einen eigenen Link zum Pfad hinzufügen:

Code:
mkdir /var/tmp/mybin
ln -s /bin/busybox /var/tmp/mybin/awk
PATH=$PATH:/var/tmp/mybin

Jörg
 
Das Workaround hat insoweit geholfen das awk jetzt in der Konsole erreicht werden kann. Danke.:groesste:
Dennoch geht es nicht. Kann es sein das diese Version von awk eine abgespeckte oder alte Version ist?:(
Es wäre nett wenn jemand das Script bei sich mal durchlaufen lässt.
Oder gibt es irgendwo eine andere (höhere) Version von busybox.
 
Bei mir läuft es (mit shebang auf #!/bin/sh statt bash) soweit. Ich habe keine USB-Box, daher hab ich es gleich nach /dev/null geschrieben:

Code:
/var/mod/root # cat /tmp/awk.txt
#!/bin/sh
#
# Script zum Podcast download
# V0.1 created by SetiCruncher
#
clear
# Variablen
USB_RSS=/var/media/ftp/MassStorageDevice-Partition-0-1/podcast
USB_FILES=/var/media/ftp/MassStorageDevice-Partition-0-1/files
# Test ob Ordner da ist, wenn nicht wird er angelegt
if test -r $USB_RSS -a -d $USB_RSS
        then
                echo
        else
                mkdir $USB_RSS
fi

# RSS-XML Daten holen und letzten Podcast als Variable speichern
cd $USB_RSS
wget http://der-duebel.podspot.de/rss
DATEI=$(grep "<enclosure url="  rss |  sed -n '1,1p' | awk -F'"' '{print $2}')
DATEINAME=$(grep "<enclosure url="  rss |  sed -n '1,1p' | awk -F'"' '{print $2}' | awk -F/ '{print $5}')

#Podcast Download und Speicherung
if test -f $USB_RSS/$DATEINAME
         then
                echo "Datei $DATEINAME ist schon vorhanden und wird übersprungen"
                rm rss
         else
                 wget $DATEI -O /dev/null
                rm rss
fi
exit 0
/var/mod/root # chmod +x /tmp/awk.txt
/var/mod/root # /tmp/awk.txt
mkdir: cannot create directory '/var/media/ftp/MassStorageDevice-Partition-0-1/podcast': No such file or directory
/tmp/awk.txt: cd: line 19: can't cd to /var/media/ftp/MassStorageDevice-Partition-0-1/podcast
Connecting to der-duebel.podspot.de (87.230.74.146:80)
rss                  100% |***************************************************************************************************| 76403  --:--:-- ETA
Connecting to der-duebel.podspot.de (87.230.74.146:80)
null                 100% |***************************************************************************************************| 13563k 00:00:00 ETA
/var/mod/root # awk --help
BusyBox v1.9.2 (2008-06-07 15:42:57 CEST) multi-call binary

Usage: awk [OPTION]... [program-text] [FILE...]

Options:
        -v var=val      Set variable
        -F sep          Use sep as field separator
        -f file         Read program from file

/var/mod/root #

EDIT: Wie wäre es denn ohne awk:
Code:
FULLPATH=`grep  "<enclosure url="  rss | sed -n '1,1 s%.*\(http:.*mp3\).*%\1%p'`
FILE=${FULLPATH##*/}

Jörg
 
Zuletzt bearbeitet:
Das ist natürlich noch besser. Ich danke dir wie verrückt.
Ich war schon am verzweifeln, doch unter Linux gibt es komischerweise immer tausend Wege die zum Ziel führen.

:groesste::groesste::groesste:
 
Gerne, ich "kann" halt kein awk, da muss man erfinderisch sein ;-)

Jörg
 
Holen Sie sich 3CX - völlig kostenlos!
Verbinden Sie Ihr Team und Ihre Kunden Telefonie Livechat Videokonferenzen

Gehostet oder selbst-verwaltet. Für bis zu 10 Nutzer dauerhaft kostenlos. Keine Kreditkartendetails erforderlich. Ohne Risiko testen.

3CX
Für diese E-Mail-Adresse besteht bereits ein 3CX-Konto. Sie werden zum Kundenportal weitergeleitet, wo Sie sich anmelden oder Ihr Passwort zurücksetzen können, falls Sie dieses vergessen haben.