Hallo,
in der Zeile
echo "export PS1='$PWD # '" >> /var/tmp/profile
steckt ein kleiner Fehler. Damit die Variable
$PWD nicht schon beim umleiten in die profile-Datei expandiert und dort als fester Text ausgeschrieben wird, muss noch ein Backslash ("
\") vor
$PWD gesetzt werden.
Das Beispiel von MaxMuster sieht korrigiert dann so aus:
Code:
cp /etc/profile /var/tmp/profile
mount -o bind /var/tmp/profile /etc/profile
echo "export PS1='\$PWD # '" >> /var/tmp/profile
@Joe_57
Deine "
$MyStick" Funktion hat mich auf die Idee gebracht den Pfad zu meinen USB-Speicher auf gleicher Weise zur PATH-Umgebungsvariablen hinzuzufügen, damit ich die Scripte die ich auf einen USB-Stick abgelegt habe auch direkt von dort aus starten kann.
Ebenso kann man auch hilfreiche Shell-Funktionen und einige alias in die "profile"-Datei schreiben, die "
debug.cfg" könnte dann etwa so aussehen:
Code:
#!/bin/sh
sleep 60
cp /etc/profile /var/tmp/profile
mount -o bind /var/tmp/profile /etc/profile
echo "export PS1='\$PWD # '" >> /var/tmp/profile
MyFtpPath=$(mount | grep /var/media/ftp/ | sed -e "s|^.* on ||g" -e "s/ .*$//")
if [ "$MyFtpPath" != "" ] ; then
echo "export PATH=$PATH:$MyFtpPath" >> /var/tmp/profile
fi
echo alias cls=\'clear\' >> /var/tmp/profile
echo 'dir() { if [[ "$1" = "" ]] ; then ls -al ; else ls -al | grep -i "$1" ; fi }' >> /var/tmp/profile
einige Erklärungen zum Code:
sleep 60
... stellt sicher, dass die Box vollständig gebootet wurde, damit der mount zum USB-Stick auch gefunden wird.
cp /etc/profile /var/tmp/profile
... kopiert die originale /etc/profile nach /var/tmp/ damit sie dort editiert werden kann,
anschließend wird die profile-Datei mit der Ausgabeumleitung "
>>" zeilenweise ergänzt.
mount -o bind /var/tmp/profile /etc/profile
... mountet die zu ändernde Kopie der "profile"-Datei anstelle der originalen unter /etc/profile
echo "export PS1='\$PWD # '" >> /var/tmp/profile
... ändert die Umgebungsvariable "
PS1" in der "profile"-Datei, damit der aktuelle Verzeichnispfad an der Eingabeaufforderung angezeigt wird.
if [ "$MyFtpPath" != "" ]
... prüft ob ein entsprechender Pfad zum USB-Stick gefunden wurde, ansonsten braucht die PATH-Variable erst gar nicht erweitert zu werden.
echo "export PATH=$PATH:$MyFtpPath" >> /var/tmp/profile
... erweitert die vorhandene Umgebungsvariable
PATH um meine Variable
MyFtpPath, die den Pfad zum USB-Speicherstick enthält.
echo alias cls=\'clear\' >> /var/tmp/profile
... definiert einen alias "
cls" in der profile
Der Alias für "cls" ist natürlich nur ein simples Bespiel, für alle die sich nicht von dem DOS-Befehl "cls" umgewöhnen wollen
echo 'dir() { if [[ "$1" = "" ]] ; then ls -al ; else ls -al | grep -i "$1" ; fi }' >> /var/tmp/profile
... definiert eine Shell-Funktion "
dir" in der profile
Die so definierte "dir" Funktion kann als Ersatz für den "ls" Befehl benutzt werden und unterscheidet, ähnlich
wie der namensgleiche DOS-Befehl, nicht zwischen Groß-/Kleinschreibung (Sternchen sind jedoch nicht erforderlich).
Sollte man mit dieser "dir"-Funktion alle Links in einem Verzeichnis anzeigen lassen wollen, kann man einfach
dir ">" eingeben.
Anmerkungen:
Im Gegensatz zu den Umgebungsvariablen, sind die alias und die Shell-Funktionen, die in der profile Datei der FritzBox definiert werden, jedoch nur für die Telnet-Eingabeaufforderung gültig. Beim Aufruf von Script-Dateien aus der Eingabeaufforderung sind sie innerhalb des Scriptes nicht bekannt.
Sollen alias und Shell-Funktionen innerhalb von Scripten verwendet werden, muss man sie in dem Script selbst definierten.
(getestet mit der Fritz!Box 7170, Firmware 29.04.67)
Danke auch für eure Anregungen
Schöne Grüße
Neyk