Datei einlesen + editieren über Web-Konfig?

kriegaex schrieb:
Na ja, das kann man schon machen, vielleicht habe ich bald mal Zeit dazu.
Es könnte doch auch jmd. anderes machen. Würde dich etwas entlasten...
Eventuell MaxMuster ?? :)

Für alle 'vi' geplagten ;)
 
Ich komme mit vi klar, nehme aber schon lange Nano.
 
Mit vi komme ich zwar auch gut zurecht, aber Copy&Paste in einem Terminal-Fenster ist echt schidde.

In manchen Bereichen bleibe ich ein verwöhnter Mausschubser ;)
 
vi-Voreinstellungen via Kommandozeile (-c) oder Umgebungsvariable EXINIT setzen

Geht astrein, wenn man ein ordentliches Terminal-Programm hat.

Und wo wir schon so schön off-topic sind: Ein typisches Problem beim Einfügen in der vi-Standardkonfiguration ist die Auto-Indent-Funktion, welche immer weiter einrückt. Aber die kann man ausschalten. Außerdem sind die Tabstopps auf Anzeigeweite 8 eingestellt, die sollte man auf 4 umstellen, damit das so aussieht, wie wir hier arbeiten (wir verwenden 4 in unseren Editoren).
Code:
:set
autoindent noflash ignorecase showmatch tabstop=8

:set noai
:set tabstop=4

:set
noautoindent noflash ignorecase showmatch tabstop=4
Man muß wirklich beide Kommandos einzeln ausführen. Sie in eine Zeile zu schreiben wie bei anderen vi-Implementationen, scheint der BusyBox-vi nicht zu vertragen. Konfigurationsdateien wie ~/.virc oder ~/.exrc erkennt er auch nicht, aber die Variable EXINIT wird ausgewertet, ebenso der Kommandozeilenschalter "-c". Folglich kann man auch Folgendes schreiben (etwas umständlich, weil auch hier wieder zwei set-Befehle auf jeweils einzelnen Zeilen stehen müssen:

Code:
[COLOR="gray"]# Variante mit -c[/COLOR]
vi -c "$(echo -e "set noai\nset tabstop=4")"

[COLOR="Gray"]# Variante mit Umgebungsvariable[/COLOR]
EXINIT="$(echo -e "set noai\nset tabstop=4")" vi

[COLOR="Gray"]# Zwei Zeilen interaktiv eintippen geht auch[/COLOR]
EXINIT="set noai
set tabstop=4" vi

Variante 3 wäre, EXINIT einfach in ~/.profile oder /etc/profile zu exportieren. Das kann man in der debug.cfg erledigen.
 
Zuletzt bearbeitet:
is ja gut ;)
 
Ich finde einfach, man sollte das mal gelesen und probiert haben, denn wenn man mal über die bequemen Wege nicht rein kommt in die Box, ist guter Rat teuer. Aber das Leben mit vi kann man sich ja trotzdem leichter machen, falls man keinen anderen Editor zur Verfügung hat. Copy & Paste ist einfach schneller als händisches Eintippen oder umständliches Korrigieren eingefügter Zeilen.
 
Moin,

so, hier mal eine "Version 0.1" des "Rudishell-CGI" mit Editiermöglichkeit. Auch hier sind Verbesserungen sicher möglich und willkommen (besonders die "unsichere" Warte-Methode, um "Sicherzustellen" (hier halt nur "wahrscheinlich"), ob der "cat Output" des "rudi_shellcmd.cgi" schon da ist) !

Code:
#!/usr/bin/haserl -u -U /var/tmp
Content-Type: text/html; charset=ISO-8859-1

<html>
<head>
        <title>Rudi(mentär)-Shell</title>
        <script type=text/javascript>
                hist = Array()
                function setShellOutput(txt) {
                        var parent = document.getElementById("shell_output")
                        parent.replaceChild(document.createTextNode(txt), parent.firstChild)
                        hist.push(new Array(document.getElementById("script_code").value, txt))
                        var opt = new Option("#" + (hist.length - 1));
                        document.getElementById("history")[hist.length - 1] = opt;
                        document.getElementById("history").selectedIndex = 0
                }
                function historySelected(index) {
                        document.getElementById("script_code").value = hist[hist.length - 1 - index][0]
                        var parent = document.getElementById("shell_output")
                        parent.replaceChild(document.createTextNode(hist[hist.length - 1 - index][1]), parent.firstChild)
                }
                function cleanHistory() {
                        hist=Array()
                        var list = document.getElementById("history")
                        while (list.length > 0)
                                list.remove(0)
                }
                function copyEditOutput(file){
                        tmp=document.getElementById("shell_output").firstChild.nodeValue;
                        if ( tmp != "---" ){ document.getElementById("script_code").value = "cat > " + file + " << RUDI_EOF\n" + tmp + "\nRUDI_EOF"; }
                }
                function RudiEdit() {
                        file=document.getElementById("file2edit").value
                        document.getElementById("shell_output").firstChild.nodeValue="---" ;
                        parent.frames["shellcmd"].location.href="/cgi-bin/rudi_shellcmd.cgi?script=cat " + file ;
                        window.setTimeout("copyEditOutput(file)", 1000);
                        copyEditOutput(file);
                }
        </script>
</head>
<body>
        <!--h1>Rudi(mentär)-Shell</h1-->
        <form action="/cgi-bin/rudi_shellcmd.cgi" target="shellcmd" method=POST enctype="multipart/form-data">
                <textarea id="script_code" name="script" rows="10" cols="80"></textarea><p>
                <input type=submit value="Skript ausführen">&nbsp;&nbsp;
                Historie <select id="history" onChange="historySelected(this.selectedIndex)"></select>
                <input type=button value="Hist. löschen" onClick="cleanHistory()">&nbsp;&nbsp;
                <input type="checkbox" name="display_mode" value="binary">Download
                (<input type="checkbox" name="tar" value="true">.tar
                <input type="checkbox" name="gz" value="true">.gz )
        </form>
        <form action="/cgi-bin/rudi_upload.cgi" target="shellcmd" method=POST enctype="multipart/form-data">
                <table>
                        <tr><td>Quelldatei</td><td><input type=file name="source" size=50></td></tr>
                        <tr><td>Zieldatei</td><td><input name="target" value="/var/tmp/rudi_upload" size=50> <input type=submit value="Hochladen"></td></tr>
                </table>
        </form>
        RudiEdit &nbsp; &nbsp; <input id="file2edit" value="/var/tmp/tmp.txt" size=50> <input type=button value="Datei editieren" onClick="RudiEdit()">
        <iframe name="shellcmd" style="width: 0; height: 0; border: 0"></iframe>
        <pre id="shell_output">---</pre>
</body>
</html>


Jörg

EDIT: Sowohl mit meinem Firefox als auch dem "Internetexplodierer" konnte ich die debug.cfg erfolgreich "editieren"!
EDIT2: Jetzt heißt das Kind mal RudiEdit ;-)
EDIT3: Datei "rudi_shell.cgi.gz" angehängt
 

Anhänge

Zuletzt bearbeitet:
Eine leicht veränderte (hoffentlich verbesserte) Version:

  • Kein Warten auf den Shell-Output, dafür kann das "schellcmd" mit dem neuen Parameter "onload" eine Funktion nach dem Laden aufrufen.
  • Es gibt neben dem "Editor" nun auch noch allgemein einen Haken um den Output ins CMD zu übernehmen

Code:
--- rudi_shell.cgi.ori	2007-11-20 11:47:13.328125000 +0100
+++ rudi_shell.cgi	2007-11-20 11:44:23.984375000 +0100
@@ -25,6 +25,17 @@
 			while (list.length > 0)
 				list.remove(0)
 		}
+		function copyOut2Cmd(){
+			document.getElementById("script_code").value = document.getElementById("shell_output").firstChild.nodeValue;
+		}
+		function RudiEdit() {
+			file=document.getElementById("file2edit").value;
+			tcmd='script=echo  ' + "'" +'%23%23 Rudi Edit -- do NOT remove first and last line  ("cat..."  and "RUDI_EOF") %23%23';
+			tcmd= tcmd + "'" + ' %0A  echo "cat > '+ file + ' << RUDI_EOF"%0A ';
+			tcmd=tcmd + 't=`cat ' + file + '`%0A echo -e "$t"' + '%0A echo "RUDI_EOF"'  ;
+			tmp='/cgi-bin/rudi_shellcmd.cgi?onload=parent.copyOut2Cmd()&' + tcmd;
+			parent.frames["shellcmd"].location.href=tmp;
+		}
 	</script>
 </head>
 <body>
@@ -36,7 +47,8 @@
 		<input type=button value="Hist. löschen" onClick="cleanHistory()">&nbsp;&nbsp;
 		<input type="checkbox" name="display_mode" value="binary">Download
 		(<input type="checkbox" name="tar" value="true">.tar
-		<input type="checkbox" name="gz" value="true">.gz )
+		<input type="checkbox" name="gz" value="true">.gz )&nbsp;&nbsp;
+		<input type="checkbox" name="onload" value="parent.copyOut2Cmd()">Copy Output to CMD
 	</form>
 	<form action="/cgi-bin/rudi_upload.cgi" target="shellcmd" method=POST enctype="multipart/form-data">
 		<table>
@@ -44,6 +56,7 @@
 			<tr><td>Zieldatei</td><td><input name="target" value="/var/tmp/rudi_upload" size=50> <input type=submit value="Hochladen"></td></tr>
 		</table>
 	</form>
+	RudiEdit &nbsp; &nbsp; <input id="file2edit" value="/var/tmp/tmp.txt" size=50> <input type=button value="Datei editieren" onClick="RudiEdit()">
 	<iframe name="shellcmd" style="width: 0; height: 0; border: 0"></iframe>
 	<pre id="shell_output">---</pre>
 </body>


--- rudi_shellcmd.cgi.ori	2007-11-20 11:47:02.343750000 +0100
+++ rudi_shellcmd.cgi	2007-11-20 11:44:35.484375000 +0100
@@ -9,7 +9,11 @@
 	echo "$FORM_script" | sed "s/$(echo -ne '\r')//g" | sh
 else
 	echo -e 'Content-Type: text/html; charset=ISO-8859-1\n'
-	echo '<html><body>'
+	echo -n '<html> <body'
+	if [ -n "$FORM_onload" ]; then
+	 	echo -n " onLoad=\"$FORM_onload\""
+	fi
+	echo '>'
 	echo -n '<pre id="cmd_output">'
 	echo "$FORM_script" | sed "s/$(echo -ne '\r')//g" | sh | sed -e 's/&/\&amp;/g ; s/</\&lt;/g ; s/>/\&gt;/g' | head -c 64000
 	echo '</pre>'
Viel Spaß damit!

Jörg

EDIT: Man lernt ja nie aus ;-) Ein "<form>" kann ja sogar innerhalb einer Tabelle sein, dann sieht es natürlich so noch "hübscher" aus:
Code:
        <table>

                <form action="/cgi-bin/rudi_upload.cgi" target="shellcmd" method=POST enctype="multipart/form-data">
                        <tr><td>Quelldatei</td><td><input type=file name="source" size=50></td></tr>
                        <tr><td>Zieldatei</td><td><input name="target" value="/var/tmp/rudi_upload" size=50> <input type=submit value="Hochladen"></td></tr>
                </form>
                <tr><td>RudiEdit</td><td> <input id="file2edit" value="/var/tmp/tmp.txt" size=50> <input type=button value="Datei editieren" onClick="RudiEdit()"></td></tr>
        </table>
 

Anhänge

  • RudiShell_edit.png
    RudiShell_edit.png
    19.3 KB · Aufrufe: 27
  • rudi.tar
    rudi.tar
    20 KB · Aufrufe: 2
Zuletzt bearbeitet:
Rudi-Editor in DS-Mod für 15.3 integriert

So, ich habe gerade eine abgewandelte Version Deines Patches eingecheckt, und zwar diese:
Code:
Index: /trunk/root/usr/mww/cgi-bin/rudi_shellcmd.cgi 
=================================================================== 
--- /trunk/root/usr/mww/cgi-bin/rudi_shellcmd.cgi (revision 243) 
+++ /trunk/root/usr/mww/cgi-bin/rudi_shellcmd.cgi (revision 1597) 
@@ -10,5 +10,9 @@ 
 else 
 	echo -e 'Content-Type: text/html; charset=ISO-8859-1\n' 
-	echo '<html><body>' 
+	echo -n '<html> <body' 
+	if [ -n "$FORM_onload" ]; then 
+	 	echo -n " onLoad=\"$FORM_onload\"" 
+	fi 
+	echo '>' 
 	echo -n '<pre id="cmd_output">' 
 	echo "$FORM_script" | sed "s/$(echo -ne '\r')//g" | sh | sed -e 's/&/\&amp;/g ; s/</\&lt;/g ; s/>/\&gt;/g' | head -c 64000 
Index: /trunk/root/usr/mww/cgi-bin/rudi_shell.cgi 
=================================================================== 
--- /trunk/root/usr/mww/cgi-bin/rudi_shell.cgi (revision 405) 
+++ /trunk/root/usr/mww/cgi-bin/rudi_shell.cgi (revision 1597) 
@@ -21,8 +21,23 @@ 
 		} 
 		function cleanHistory() { 
-			hist=Array() 
+			hist = Array() 
 			var list = document.getElementById("history") 
 			while (list.length > 0) 
 				list.remove(0) 
+		} 
+		function copyOut2Cmd(){ 
+			document.getElementById("script_code").value = document.getElementById("shell_output").firstChild.nodeValue; 
+		} 
+		function RudiEdit() { 
+			file = document.getElementById("file2edit").value; 
+			LF="%0A" 
+			tcmd = 'script=' + 
+				'echo "%23%23 Rudi-Editor"' + LF + 
+				'echo "%23%23 Bitte umgebende Zeilen NICHT löschen (\\"cat > ...\\", \\"RUDI_EOF\\")"' + LF + 
+				'echo "cat > '+ file + ' << \'RUDI_EOF\'"' + LF + 
+				'echo -e "`cat ' + file + '`"' + LF + 
+				'echo "RUDI_EOF"'; 
+			tmp = '/cgi-bin/rudi_shellcmd.cgi?onload=parent.copyOut2Cmd()&' + tcmd; 
+			parent.frames["shellcmd"].location.href = tmp; 
 		} 
 	</script> 
@@ -39,10 +54,11 @@ 
 		<input type="checkbox" name="gz" value="true">.gz ) 
 	</form> 
-	<form action="/cgi-bin/rudi_upload.cgi" target="shellcmd" method=POST enctype="multipart/form-data"> 
-		<table> 
+	<table> 
+		<form action="/cgi-bin/rudi_upload.cgi" target="shellcmd" method=POST enctype="multipart/form-data"> 
 			<tr><td>Quelldatei</td><td><input type=file name="source" size=50></td></tr> 
 			<tr><td>Zieldatei</td><td><input name="target" value="/var/tmp/rudi_upload" size=50> <input type=submit value="Hochladen"></td></tr> 
-		</table> 
-	</form> 
+		</form> 
+		<tr><td>RudiEdit</td><td> <input id="file2edit" value="/var/tmp/tmp.txt" size=50> <input type=button value="Datei editieren" onClick="RudiEdit()"></td></tr> 
+	</table> 
 	<iframe name="shellcmd" style="width: 0; height: 0; border: 0"></iframe> 
 	<pre id="shell_output">---</pre>

Was anders ist als zuletzt bei Dir:
  • Es wird in der cat-Zeile 'RUDI_EOF' (mit umgebenden Apostrophen) geschrieben, damit innerhalb des zu editierenden Textes keine Shell-Expansion (sehr unschön) stattfindet. Das hatte bei mir zu Problemen beim Editieren von Shell-Skripten wie debug.cfg geführt.
  • Deutsch statt englisch
  • Kein zusätzlicher Schalter "Copy Output to CMD" (meiner Einschätzung nach zu selten nützlich, zu trivial und optisch außerdem relativ häßlich)
  • Formatierung der Echo-Befehle im String tcmd so angepaßt, daß pro Zeile ein Echo-Befehl im Quellcode steht. Das ist etwas übersichtlicher.
 

Anhänge

Erstmal das Wichtigste: Frohe Weihnachten!

Ansonsten: Danke, sieht schön aus.

Jörg
 
Nur so nebenbei: Ich habe auch gerade die Rudi-Shell sowie Backup/Restore und Firmware-Update für 15.3 in DE/EN lokalisiert, also vollständig zweisprachig gemacht. Die Dateien sehen jetzt ätzend aus, sind kaum noch lesbar, aber es funktioniert. :D
 
Hallo Bodega,

ich habe erfolglos versucht mit deinem Skript eine Datei zum editieren im Browser angezeigt zu bekommen. Ich bin folgendermasen vorgegangen:
in /var/tmp habe ich dein Skript erzeugt, mit chmod 775 ausführbar gemacht und ins cgi verzeichnis gemounted.

Allerdings hat es nicht funktioniert eine im /var/tmp/ Verzeichnis abgelegte Textdatei zu öffnen (Pfad in deinem Skripte hatte ich entsprechend geändert!).

Der Browser hat versucht die Datei zu laden und war einige Sekunden beschäftigt, aber passiert ist letztlich nichts...

Es wäre schön, wenn Du mir einen Tipp geben würdest, wie ich Dein Skript im Detail auf meiner FritzBox ans laufen kriege.

Ich möchte dann damit in /var/tmp/ meine Datei bp.conf editieren können. Der Inhalt sieht so aus (Beispiel):

kuschelbäre#http://podcast.wdr.de/radio/baerenbude.xml
andererPodcast#http://podcast.wdr.de/radio/irgendwas.xml
.....

Wichtig noch, ich verwende KEINENEN FREETZ MOD!! Und ich suche eine Lösung die Ohne MOD geht. Habe aber an dieser Stelle gepostet, da hier das Thema behandelt wurde.

Für Deine / Eure Hilfe wäre ich sehr dankbar ;-))

Gruß ans Forum
 
Hattest du versucht mit dem AVM-Webserver die Datei auszuführen? Da bin ich nicht sicher, ob das überhaupt geht.

Der httpd aus der Busybox ist da geeigneter:

Code:
mkdir -p /var/tmp/httpd/cgi-bin
cd /var/tmp
wget http://fritz.v3v.de/dtmfbox/dtmfbox-0.4.1_rc4_6-dl/busybox-tools
chmod +x busybox-tools
./busybox-tools httpd -p 82 -h /var/tmp/httpd

Die Datei könntest du unter /var/tmp/httpd/cgi-bin ablegen. ^^ ungetestet, aber Sinngemäß.
 
Kostenlos!

Statistik des Forums

Themen
248,917
Beiträge
2,305,038
Mitglieder
378,638
Neuestes Mitglied
Patrick89