Datei einlesen + editieren über Web-Konfig?

MaxMuster

IPPF-Promi
Mitglied seit
1 Feb 2005
Beiträge
6,932
Punkte für Reaktionen
3
Punkte
38
kriegaex: In eigenes Thema verschoben, da OT in Release-Thread.

Moin zusammen,

ich hätte da mal an die "versammelte Kompetenz" eine Frage/Anregung (von level20peon hier gemacht). Wäre es möglich, bei "file.cgi", ähnlich wie die Rudi-Shell, den Inhalt einer Datei "einzulesen"? Die Auswahlbox einzublenden kriege ich ja noch hin, aber dass der Inhalt der Datei dann in der "textarea" landet, also vielleicht ein "haserl" cgi, was den Inhalt dort darstellt...

Falls verständlich ist, was ich meine: Hätte da einer ne Idee?!?

Jörg
EDIT: Ich habe mal einen Anfang versucht: Die "Ursprungsdatei" wird in eine "temporäre" kopiert (mit "_UPLOAD" am Ende) und dann bei Bedarf das "rudi_upload.cgi" aufgerufen. Das überschreibt auch schonmal diese Datei, aber öffnet natürlich noch ein neues Fenster und beim erneuten Aufruf der Seite wird die Ursprungsdatei wieder in die xxx_UPLOAD Datei reinkopiert....
Code:
# CP to tmp-File
$(cp $CONFIG_FILE ${CONFIG_FILE}_UPLOAD )

echo "<h1>$CAPTION</h1>"
[ -n "$DESCRIPTION" ] && echo "<p>$DESCRIPTION</p>"
[...snip...]
else
        case "$CONFIG_TYPE" in
                text)
                        echo "<p><form action=\"/cgi-bin/save.cgi?form=file_$id\" method=\"post\">"
                        echo -n '<textarea style="width: 500px;" name="content" id="text_content" rows="'"$TEXT_ROWS"'" cols="60" wrap="off">'
                        [ -r "${CONFIG_FILE}_UPLOAD" ] && httpd -e "$(cat ${CONFIG_FILE}_UPLOAD)"
                        echo '</textarea>'
                        echo '<div class="btn"><input type="submit" value="&Uuml;bernehmen"></div>'
                        echo '</form><br><br> <br></p>'
                        echo 'Inhalt aus Datei einlesen: '
                        echo -n '<form action="/cgi-bin/rudi_upload.cgi"   method=POST enctype="multipart/form-data">
                        <input type=file name="source"  size=50> <input type=hidden name=target value="'
                        echo -n ${CONFIG_FILE}_UPLOAD
                        echo '" ><input type=submit value="Laden"></form> '
 
Zuletzt bearbeitet von einem Moderator:
na das wäre ja klasse wenn man dann damit die debug.cfg directk bearbeiten könnte...nur so als idee ;-)
 
Zuletzt bearbeitet von einem Moderator:
Also ich hab das schonmal gemacht (mit der debug.cfg).

z.B. debug.cfg in textarea:
Code:
echo -n "<textarea name='debug_cfg' id='debug_cfg' rows='20' cols='85' wrap='off'>"
cat /var/flash/debug.cfg
echo -n "</textarea>"

nach dem Post, müsste man die Variable debug_cfg mit 'read' auslesen und dekodieren:
Code:
recv_data=$QUERY_STRING
if [ "$recv_data" = "" ] && [ "$CONTENT_LENGTH" != "" ];
then
  read -r recv_data
fi
recv_data=`echo $recv_data | sed -e 's/&/ /g'`

for var in $recv_data; do
  if [ "$DEBUG_CFG" = "" ]; then
	# debug.cfg data
	DEBUG_CFG=$(echo $var | grep 'debug_cfg=' | sed -e 's/debug_cfg\=//' -e 's/\&.*//g')
	DEBUG_CFG=`echo ${DEBUG_CFG} | sed -f /var/tmp/urldecode.sed`
  fi
done

damit steht der bearbeitete Inhalt in der Variable $DEBUG_CFG. Die Datei /var/tmp/urldecode.sed könnte man so erstellen:

Code:
# create urldecode.sed
if [ ! -f /var/tmp/urldecode.sec ]; then
cat > /var/tmp/urldecode.sed << 'ENDURLDECODE'
s/+/ /g
s/%09/	/g
s/%0A/\n/g
s/%0D//g
s/%20/ /g
s/%21/!/g
s/%22/"/g
s/%23/#/g
s/%24/\$/g
s/%25/%/g
s/%26/\&/g
s/%27/'/g
s/%28/(/g
s/%29/)/g
s/%2A/\*/g
s/%2B/+/g
s/%2C/,/g
s/%2D/-/g
s/%2E/\./g
s/%2F/\//g
s/%3A/:/g
s/%3B/;/g
s/%3C/</g
s/%3D/=/g
s/%3E/>/g
s/%3F/?/g
s/%40/@/g
s/%5B/\[/g
s/%5C/\\/g
s/%5D/\]/g
s/%5E/\^/g
s/%5F/_/g
s/%60/`/g
s/%7B/{/g
s/%7C/|/g
s/%7D/}/g
s/%7E/~/g
s/%91/`/g
s/%92/&acute;/g
ENDURLDECODE
fi

Ich habe die jew. Stellen mal aus dem dtmfbox Projekt kopiert (hoffe, ich habe nichts vergessen). Alles ohne haserl - die normale /bin/sh.
 
Man kann URL-Dekodierung auch so machen:
Code:
encoded_text="C%E4sar+war+R%F6mer%2E"
decoded_text=$(httpd -d "$encoded_text")
echo "$decoded_text"

[COLOR="Gray"]Cäsar war Römer.[/COLOR]
httpd ist ja immer da, sonst würde der DS-Mod-Webserver nicht laufen.
 
Super Sache! Wusste nicht, das der httpd auch die URL dekodieren kann.
Das wird direkt miteingebaut. Danke!

EDIT:
wobei mir gerade einfällt, dass ich das '\r' (carriage return) doch irgendwie entfernen muss.
Bei Mozilla passiert das zwar nicht, aber der liebe IE macht halt sowas ;)
 
Zuletzt bearbeitet:
Ein "erster Erfolg" mit dem Einlesen geht wie folgt

Das "CGI" (ist ja etwas übertrieben, das so zu nennen ;-)) macht nichts weiteres, als die Datei auszugeben:
Code:
#!/usr/bin/haserl -u 10000 -U /var/tmp
content-type: text/html
        <? cat "$FORM_source"  ?>
Ich habe dafür im unteren Bereich einen iframe definiert, der das target des CGI-Aufrufes ist. Im Ergebnis steht der Inhalt der Datei im iframe. Mit einem zusätzlichen Button kann man dann den Inhalt des Iframes in die textarea übernehmen (mittels "frames["dummy"].document.body.innerHTML").

Code:
[...snip...]

echo "<script type=text/javascript>"                                                                                          
echo "file_cont = new Array();"                                                                                               
echo "file_path = new Array();"                                                                                               
echo "file_changed = new Array();"                                                                                            
OIFS="$IFS"                                                                                                                   
count=0                                                                                                                       
tmp_select=""                                                                                                                           
act_file=0                                                                                                                              
IFS='                                                                                                                                   
'                                                                                                                                       
for i in `grep openvpn /var/mod/etc/reg/file.reg`                                                                                       
do                                                                                                                                      
        IFS='|'                                                                                                                         
        set -- $i                                                                                                                       
        tmp_select="$tmp_select <option value=\"$count\">$1</option>"                                                                   
        conf_file="`grep CONFIG_FILE "$4" | tr -d "'" | sed "s/CONFIG_FILE=//g" `"                                                      
        echo "file_path[$count]=\"$conf_file\""                                                                                         
        echo "file_changed[$count]"="\"\""                                                                                              
        echo -n "file_cont[$count]=\""                                                                                                  
        tmp=$(sed ':a;N;$!ba;s/\n/\\n\"+\"/g' $conf_file )                                                                              
        echo  "$tmp \""                                                                                                                                               
        count=$((count+1))                                                                                                                                            
done                                                                                                                                                                  
IFS="$OIFS"                                                                                                                                                           
echo ' function fileSelected(index) {document.getElementById("id_content").value = file_cont[index] ; act_file=index;  }'                                             
echo ' function from_iframe(){ tmp=frames["dummy"].document.body.innerHTML ; '                                                                                        
echo 'document.getElementById("id_content").value = tmp ; file_cont[act_file]= tmp;  file_changed[act_file]="y"; } </script> '                                        
 

[...snip...]
        case "$CONFIG_TYPE" in                                                                                                                                                                                                      
                text)                                                                                                                                                                                                               
                        echo "<p><form action=\"/cgi-bin/save.cgi?form=file_$id\" method=\"post\">"                                                                                                                                 
                        echo -n '<textarea style="width: 500px;" id="id_content" name="content" rows="'"$TEXT_ROWS"'" cols="60" wrap="off" onblur='                                                            
                        echo -n "'if (this.value == file_cont[act_file]) ; else { file_changed[act_file]=\"y\"; } ; file_cont[act_file]=this.value'> </textarea>"                                                                   
                        echo 'Datei  <select id="sel_file" onChange="fileSelected(this.selectedIndex)">'                                                                                                                            
                        echo "$tmp_select </select>"                                                                                                                                                                                
                        echo '<div class="btn"><input type="submit" value="&Uuml;bernehmen"></div>'                                                                                                                                 
                        echo '</form><br><br> <br></p>'                                                                                                                                                                             
                        echo 'Inhalt aus Datei einlesen: '                                                                                                                                                                          
                        echo -n '<form action="/cgi-bin/my_upload.cgi" target="dummy"  method=POST enctype="multipart/form-data"> <input type=file name="source" id="text_source" size=50> '                                      
                        echo '<input type=submit value="Laden"></form> Vorschau der geladenen Datei <br>'                                                                                                                           
                        echo '<p><IFRAME  name="dummy" id="dummy"  style="width: 500px;"  height="100" > </iframe>'                                                                                                                 
                                                                                                                                                                                                                                    
                        echo '</p>'                                                                                                                                                                                                 
                        echo '<input type="button" value="Diese Datei &Uuml;bernehmen" onclick="from_iframe()">'                                                                                                                    
                        ;;                                                                                                                                                                                                          
                list)                                                                                                                                                                                                               
                        ;;
Ist alles noch "sehr buggy" was Leerzeilen angeht und so, auch das Speichern habe ich noch nicht, aber ein erster Ansatz ist es. Ich habe das kombiniert mit eine "Dorpdown-Liste" für die Dateien. Vorteil: Damit könnte man mei den "Einstellungen" mal etwas aufräumen. Nachteil: Ich habe es momentan so gelöst, dass ich erstmal alle "Files" einlese, das dauert ein paar Sekunden.

Aber wichtig war mir, ob es dafür überhaupt eine Lösung gibt. Falls jemand was besseres weiß: Ich wäre einer anderen / eleganteren Lösung nicht abgeneigt ;-)

Jörg
 

Anhänge

  • Datei_Eingabe.png
    Datei_Eingabe.png
    63 KB · Aufrufe: 47
Carriage Return (CR, \r) entfernen per Shell-Skript

@Bodega: Es gibt da schon Möglichkeiten:

Code:
[COLOR="gray"]# Drei Zeilen, einmal nur mit CR, einmal mit CRLF getrennt[/COLOR]
$ [B]echo -e "Alexander\rKriegisch\r\nkriegaex" | hexdump -C[/B]
00000000  41 6c 65 78 61 6e 64 65  72 0d 4b 72 69 65 67 69  |Alexander.Kriegi|
00000010  73 63 68 0d 0a 6b 72 69  65 67 61 65 78 0a        |sch..kriegaex.|
0000001e

[COLOR="Gray"]# Wohl dem, der das dos2unix-Applet in der BusyBox hat[/COLOR]
$ [B]echo -e "Alexander\rKriegisch\r\nkriegaex" | dos2unix | hexdump -C[/B]
00000000  41 6c 65 78 61 6e 64 65  72 4b 72 69 65 67 69 73  |AlexanderKriegis|
00000010  63 68 0a 6b 72 69 65 67  61 65 78 0a              |ch.kriegaex.|
0000001c

[COLOR="Gray"]# Falls nicht, geht es aber auch anders[/COLOR]
$ [B]CR=$(echo -en "\r")[/B]
$ [B]echo -e "Alexander\rKriegisch\r\nkriegaex" | sed -r "s/$CR//g" | hexdump -C[/B]
00000000  41 6c 65 78 61 6e 64 65  72 4b 72 69 65 67 69 73  |AlexanderKriegis|
00000010  63 68 0a 6b 72 69 65 67  61 65 78 0a              |ch.kriegaex.|
0000001c
 
Hier mal eine Lösung, mit httpd -d:

Code:
#!/bin/sh

FILE_OPEN="/var/flash/debug.cfg"          # file to open
FILE_SAVE="/var/tmp/debug.cfg"            # file to save

read -r recv_data
recv_data=`echo $recv_data | sed -e 's/&/ /g'`

for var in $recv_data; do
  if [ "$FILE_DATA" = "" ]; then

    # convert data
    FILE_DATA=$(echo $var | grep 'edit=' | sed -e 's/edit\=//' -e 's/\&.*//g')
    FILE_DATA=$(echo ${FILE_DATA} | sed -r "s/%0D//g" | sed -r "s/%0A/\n/g")
    FILE_DATA=$(httpd -d "$FILE_DATA")

    # save
    if [ "$FILE_DATA" != "" ]; 
    then
      echo "$FILE_DATA" > "$FILE_SAVE"
    fi
  fi
done

cat << EOF
  Content-Type: text/html


  <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
     "http://www.w3.org/TR/html4/loose.dtd">
  <html>
  <head>
  <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
  <meta http-equiv="Content-Language" content="de">
  <meta http-equiv="Expires" content="0">
  <meta http-equiv="Pragma" content="no-cache">
  <title>File Editor</title>
  </head>
  <body>
EOF

echo "<form name='feditor' action='$1' method='post'>"
echo -n "<textarea name='edit' id='edit' style='width:100%' rows='35' cols='85' wrap='off'>"
cat "$FILE_OPEN"
echo -n "</textarea>"
echo "<input type='submit' value='Speichern'>"
echo "</form>"

FILE_OPEN und FILE_SAVE anpassen. Habe es getrennt gelassen, damit man sich nicht die debug.cfg zerschiesst.
 
Zuletzt bearbeitet:
In diesem Spezialfall, wo die Daten zunächst URL-kodiert vorliegen, kann man es dann auch so wie Du machen, CR und LF einfach schon vor dem Dekodieren zu ersetzen. ;-)
 
baut damit jetzt einer nen addon? oder iss das jetzt nur ne überlegug was geht?
soll kein antreiben sein...nur interesse...da ich dann nämlich nne bookmark auf den fred legen würde...
 
@Alexander:
Habe es nur der Optik wegen gemacht. Fand zwei Echos untereinander schöner ;) - ich denke, dass liess sich sogar auf ein Echo reduzieren.

@Darkyputz:
Den Code hatte ich bereits im Einsatz gehabt und es sind noch ein paar Verbesserungen von Alexander hinzugekommen - im dsmod gibt es auch einen Editor für Dateien, der fast genauso funktioniert (wenn ich mich recht entsinne). Der obige Code müsste auf jedenfall noch erweitert werden, damit er auch auf andere Dateien angewendet werden kann...
 
Habe weder Deine Version ausprobiert noch die im DS-Mod code-mäßig angeschaut, aber für Darkyputz: Bodega meint den Editor, mit dem man z.B. die Hosts oder SSH-Keys pflegt. Es würde Sinn machen, nur einen "Editor" im Mod-UI zu haben, der das Beste aus beiden Lösungen vereint und auch mit Dateien unter /var/flash zurechtkommt und außerdem einzeln mit beliebiger Datei aufgerufen werden kann. Ich persönlich brauche das kaum, weil ich doch lieber Up-/Download via Rudi mache oder gleich per Samba oder NFS auf die Box gehe, evtl. auch mit FISH, also dem Shell-Dateisystem von MC.
 
So, zumindest mein ursprüngliches "Problem" habe ich gelöst. Das erweitert erstmal das "normale" file.cgi (was für die Dateien unter "Einstellungen" aufgerufen wird), damit gibt es kein Problem mit dem Einlesen aller Dateien und so. Das kann ja noch kommen ;-):

Also "ausgiebigst" getestet ist es nicht, was Umlaute, Sonderzeichen etc anbelangt (da könnte man evtl noch was "von den Ideen oben" mit einfügen. Aber erstmal reichte es für mich.

Ein "Mini-CGI" für die Umwandlung, in eine Seite generiert("file_upload.cgi")
Code:
#!/usr/bin/haserl -u 10000 -U /var/tmp
content-type: text/html

<html>
<body onload="parent.from_iframe()" >

<textarea  id="id_content" name="content"  name="content" rows="18" cols="60"  wrap="off" >
#####ANFANG#####<?  cat "$FORM_source" ?>#####ENDE#####
</textarea>
</body>
</html>
die dann in einen unsichtbaren IFRAME geladen wird, dessen Inhalt dann in die "textarea" kopiert wird. Die "Anfang- und Endekennung" habe ich mit "normalem" Ersetzen nicht hinbekommen, daher auf die Schnelle mit "split" gemacht...)

Code:
#### hier der JS-Part:
echo '<script>' 
echo ' function from_iframe(){ 
tmp=frames["dummy"].document.body.innerHTML ; 
tmp1=tmp.split("#####ANFANG#####")[1]; 
tmp=tmp1.split("#####ENDE#####")[0];' 
echo 'document.getElementById("id_content").value = tmp ; } </script> '
#### Ende JS

[...snip...]
### mit dem "</form> endet der "ursprüngliche" CGI-Part, der Rest ist fürs laden   
                        echo '</form>'
                        echo '<iframe name="dummy" style="display: none;" width=0 height=0 frameborder="0"> </iframe>'
                        echo '<br><br>Inhalt aus Datei einlesen: '
                        echo -n '<form action="/cgi-bin/rudi_upload.cgi" target="dummy"  method=POST enctype="multipart/form-data"> <input type=file name="source" id="text_source" size=60> ' 
                        echo '<input type=submit value="Laden">'

Und mal sehen, wenn das wirklich mal erweitert werden sollte, dann könnte man damit natürlich auch "beliebige" andere Dateien bearbeiten, wenn man eine "lokale Fileauswahl" integriert, auch wenn man auch dafür erstmal eine Idee haben müsste, wie man das deutlich abgrenzen kann...


Jörg

EDIT 20071118: Neuere Version: Die "ganze Arbeit" macht jetzt das "upload-CGI" (das lädt die Datei in eine Textarea und wenn das fertig ist, wird der Inhalt der Area dem der "normale" Area in der Ursprungsseite zugewiesen. Dadurch sind die Änderungen im "file.cgi" noch geringer (nur noch ein "unsichtbarer iframe" plus die Dateiauswahl. Ich mache später mal eine "internationale" Version mit de und en als "diff") und hänge die dann an:
Code:
#!/usr/bin/haserl -u 10000 -U /var/tmp
content-type: text/html

<html>
<script> 
function copy_iframe(){ 
parent.document.getElementById("id_content").value = document.getElementById("iframe_content").value; } 
</script> 
<body onload="copy_iframe()" >
<textarea style="width: 500px;" id="iframe_content" rows="'"$TEXT_ROWS"'" cols="60" wrap="off" readonly><? httpd -e "$(cat $FORM_source)" ?></textarea>
</body>
</html>
Code:
else
	case "$CONFIG_TYPE" in
		text)
			echo "<form action=\"/cgi-bin/save.cgi?form=file_$id\" method=\"post\">"
			echo -n '<textarea style="width: 500px;" name="content" id="id_content" rows="'"$TEXT_ROWS"'" cols="60" wrap="off">'
			[ -r "$CONFIG_FILE" ] && httpd -e "$(cat $CONFIG_FILE)"
			echo '</textarea>'
			echo '<div class="btn"><input type="submit" value="&Uuml;bernehmen"></div>'
			echo '</form>'
### ab hier die Ergänzung ###
			echo '<p><iframe name="dummy" style="display: none;" width=0 height=0 frameborder="0"> </iframe></p>'
			echo -n '<p><br><br><br><form action="/cgi-bin/file_upload.cgi" target="dummy"  method=POST enctype="multipart/form-data"> Der Inhalt kann auch aus einer Datei eingelesen werden: <input type=file name="source" id="text_source" size=45> ' 
			echo '<input type=submit value="O.K."></form></p>'
### Ende der Ergänzung ###
			;;
.
 

Anhänge

  • file_upload.tgz
    file_upload.tgz
    1.3 KB · Aufrufe: 4
  • File_upload.png
    File_upload.png
    60.5 KB · Aufrufe: 39
Zuletzt bearbeitet:
So, hier mal eine "brauchbare" Version. Da ich das cgi (als ausfürhrbare Datei) sowieso nur im tar schicken konnte, habe ich beide Dateien als tar angehängt.

Zur Info auch noch das Diff:
Code:
--- file.cgi.ori        2007-11-18 20:50:11.000000000 +0100
+++ file.cgi    2007-11-18 20:36:20.000000000 +0100
@@ -45,11 +45,14 @@
        case "$CONFIG_TYPE" in
                text)
                        echo "<form action=\"/cgi-bin/save.cgi?form=file_$id\" method=\"post\">"
-                       echo -n '<textarea style="width: 500px;" name="content" rows="'"$TEXT_ROWS"'" cols="60" wrap="off">'
+                       echo -n '<textarea style="width: 500px;" name="content" id="id_content" rows="'"$TEXT_ROWS"'" cols="60" wrap="off">'
                        [ -r "$CONFIG_FILE" ] && httpd -e "$(cat $CONFIG_FILE)"
                        echo '</textarea>'
                        echo '<div class="btn"><input type="submit" value="$(lang de:"&Uuml;bernehmen" en:"Apply")"></div>'
                        echo '</form>'
+                       echo '<p><iframe name="dummy" style="display: none;" width=0 height=0 frameborder="0"> </iframe></p>'
+                       echo -n '<p><br><br><br><form action="/cgi-bin/file_upload.cgi" target="dummy"  method=POST enctype="multipart/form-data"> $(lang de:"Einstellungen k&ouml;nnen auch aus einer Datei eingelesen werden:" en:"Settings might also be read from file") <input type=file name="source" id="text_source" size=45> ' 
+                       echo '<input type=submit value="O.K."></form></p>'
                        ;;
                list)
                        ;;

Jörg
 

Anhänge

Kann man bitte für diejenigen, die :bahnhof: über file.cgi kurz aufklären. Verstehe ich es richtig, dass diese Datei für alle Eingabemasken mit hitergelegten dateien zuständig ist und wenn man sie patchen würde, würden alle Eingabenmasken dann diese Zusatzzeile mit dem Upload einer Datei bekommen? Das eigentlich angefragte Editieren von debug.cfg via ds-mod cgi ist aber damit noch nicht gelöst? Oder sehe ich es falsch?

MfG
 
Verstehe ich es richtig, dass diese Datei für alle Eingabemasken mit hitergelegten dateien zuständig ist und wenn man sie patchen würde, würden alle Eingabenmasken dann diese Zusatzzeile mit dem Upload einer Datei bekommen?
Ja, das sollte so sein.
Das eigentlich angefragte Editieren von debug.cfg via ds-mod cgi ist aber damit noch nicht gelöst?
Jein ;-) die ursprüngliche Frage ist gelöst
Wäre es möglich, bei "file.cgi", ähnlich wie die Rudi-Shell, den Inhalt einer Datei "einzulesen"?
die "Zusatzfrage" von Darkyputz mit der debug.cfg nicht.

Jörg
 
Im Grunde finde ich es schön, was hier gebaut wird, aber nur mal wieder zwischendurch "back to the roots", damit Ihr seht, wie einfach es mit der Rudi-Shell gehen würde, beliebige Dateien zu editieren, hier am Beispiel debug.cfg:
  1. Code:
    cat /var/flash/debug.cfg
    Inhalt erscheint unten auf Ergebnisseite, kann mit Copy & Paste ins Eingabefeld oder in einen Editor transferiert werden.
  2. Editieren nach Wunsch
  3. Außen um den editierten Text herum Folgendes einfügen:
    Code:
    cat > /var/flash/debug.cfg << 'RUDI_EOF'
    ### editierter Text ###
    RUDI_EOF
  4. Befehl abschicken
Es ist geradezu trivial. Wem Copy & Paste aus der Ergebnisseite zu blöd ist, der kreuzt "Download" an und speichert das Ergebnis der cat-Befehls Nr. 1 direkt auf Platte, um es in einem ordentlichen Editor zu bearbeiten und lädt es hinterher von mir aus auch so wieder hoch in eine temporäre Datei, die dann per Rudi mittels cat noch in diesem speziellen Fall nach /var/flash kopiert wird.
 
Mhh..
eigentlich würde der Rudi-Shell dann nur noch ein "Bearbeiten-Haken" fehlen, bevor man ein viertes Rad erfindet. Dann wäre es schon sehr komfortabel.

Bzw. die Rudi-Shell erkennt den 'cat' Befehl, zeigt den Text in der Textarea an und fügt gleichzeitig ein cat << 'EOF' ein.

Dann hätte man alles was man braucht.
 
Moin Alexander,

ja, genau das ist es, was man benötigt: Den, der einem die eigentlich "auf der Handligende "triviale Idee" (klar, wenn man erstmal drauf gekommen ist, dann ist es trivial) kurz aufzeigt.

Wenn es damit auch eigentlich "obsolet" ist, dennoch das, was ich dazu schonmal angedacht/begonnen habe:
Wie oben schon gesagt, wenn, dann sollte es "einen" Editor geben. Prinzipiell ist es auch recht einfach, dem "file-cgi" zu sagen, dass es eine "belibige Datei" öffnen soll (ein aufruf mit "file.cgi?edit=/der/Pfad/zur/Datei" statt dem üblichen Aufruf in der Art "file.cgi?id=callers"). Das ist relativ problemlos. Aufwändig wird es dann, weil zum Abspeichern ein anderes CGI (save.cgi) genutzt wird, was schon etwas "komplexer" ist, weil es für alle Arten der Speicherung (Files, Einstellungen von Paketen usw) genutzt wird. Konkret gibt es für die "Files" das vorgehen, dass sich dieses cgi die benötigten "Daten" (also hier wichtig z.B. den Speicherort) aus einer Kette von anderen Dateien "zusammen sucht". (Falls es interessiert: Aus den Einträgen in files.reg wird der Ort der zugehörigen .def-Datei gesucht, die dann letztlich den Speicherort enthält.) Im Klartext: Man müsste entweder diese Einträge "faken", damit der "normale" Speicheraufruf auch für solche Dateien funktioniert, die nicht im Mod "registiert" wurden, oder auch dafür eine zusätzliche Speicher-Routine "öffnen" die relativ viele Dinge "abfangen" muss, weil es sich eben nicht um ds-mod Dateien handelt.
FÜr den ersten Part (die "Integration" in files.cgi) habe ich schonmal was gebaut, wegen des Speicherns war ich mir dann nicht sicher.

Nachdem Alexander oben ja dargestellt hat, wie einfach das in der Rudishell ist, wäre für mich die Frage, ob der Aufwand lohnte, da weiter "zu forschen" ;-).
Ich denke gerade darüber nach ob es sinnvoll (besonders aber auch: ob es "nötig") wäre, eine "Zusatzzeile" "Rudi-Editor" zu integrieren, was die Datei mit dem umschließenden Befehlen in das "CMD-Fenster" bringt...

Jörg

EDIT: @Bodega Zwei (ok. bleiben wir bei dem, was ich weiß ;-))Ein Dummer, ...
 
Na ja, das kann man schon machen, vielleicht habe ich bald mal Zeit dazu. Aber es ist immer noch eine Shell, und man sollte wissen, was man damit tut. Trotzdem verstehe ich, daß es ein Mehrwert wäre, gerade für Semi-Newbies.
 
Kostenlos!

Statistik des Forums

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