Sie sind nicht angemeldet.

Lieber Besucher, herzlich willkommen bei: Linux Forum Linux-Web.de. Falls dies Ihr erster Besuch auf dieser Seite ist, lesen Sie sich bitte die Hilfe durch. Dort wird Ihnen die Bedienung dieser Seite näher erläutert. Darüber hinaus sollten Sie sich registrieren, um alle Funktionen dieser Seite nutzen zu können. Benutzen Sie das Registrierungsformular, um sich zu registrieren oder informieren Sie sich ausführlich über den Registrierungsvorgang. Falls Sie sich bereits zu einem früheren Zeitpunkt registriert haben, können Sie sich hier anmelden.

1

07.02.2006, 09:48

Ein kleines Shellscript erstellen

Hi @all!

Ich bin gerade dabei ein kleines Shellscript zu erstellen und habe folgendes Problem.

Wenn ich einen USB Stick mounte (geht automatisch), befindet sich darauf ein Script, welches ein anderes Script ins Verzeichnis (/bin/test) kopiert. Das Script auf dem Stick soll nun das andere Script unter /bin/test ausführen, was auch passiert.
Durch euer Forum habe ich herausgefunden, dass ein echo nur mit dem Anhang "> /dev/console" ausgegeben wird, nur wie funktioniert dies mit read?
Ich möchte einen Wert in die Varieble a einlesen, und diese anschließend wieder ausgeben. Ich weis nur nicht, wo der Fehler liegt :?

Code:

read a
echo "$a" > /dev/console

Danke im Vorraus!!

ENTARO
Das könnte ihre Werbefläche sein!

linuxerr

Prof. Dr. Schlaumeier

  • »linuxerr« ist männlich

Beiträge: 8 557

Wohnort: Mecklenburg, zur Entwicklungshilfe in Chemnitz/Sachsen ;-)

  • Nachricht senden

2

07.02.2006, 15:50

RE: Ein kleines Shellscript erstellen

Zitat

Original von ENTARO
Durch euer Forum habe ich herausgefunden, dass ein echo nur mit dem Anhang "> /dev/console" ausgegeben wird,

das ist so nicht ganz richtig. echo funktioniert schon, aber wohin die ausgabe geleitet wird ist eine frage der bash. soetwas wie ein kommando zur bildschirmausgabe gibt es im prinzip nicht. die bash stellt jedem kommando (mindestens) 3 datenkanäle zur verfügung. den standardeingabekanal 0, den standardausgabekanal1 und den standarderrorkanal 2. wohin diese drei kanäle zeigen, legt die bash fest. wenn du also ein terminal öffnest, dann erbt das aufgerufene kommando die festlegung der kanäle von der bash. im normalfall ist der kanal 0 mit den ausgaben deines terminals(also tastatur) und kanal 1 und 2 landen auf dem bildschirm. echo gibt nun eigentlich nur einen seiner parameter an den kanal 1 aus und der landet im normalfall auf dem bildschirm, muss er aber nicht, wenn der kanal umgeleitet wird.
beispiel
echo "Meine liebe Oma" landet auf dem bildschirm, aber
echo "Meine liebe Oma" 1> /tmp/tester gibt scheinbar "nichts" aus. der ausgabekanal wurde in eine datei umgeleitet. eingabekanäle können auch umgeleitet werden.

Zitat


nur wie funktioniert dies mit read?

eigentlich durch umleitung des standardeingabekanals, also mit
read a 0< /dev/console
schwierigkeiten bekommst du, weil der augabekanal der bash auf konsole natürlich in ein anderes kommando zeigt. probiers mal aus.

du siehst also die materie ist komplizierter als man zuerst denkt. ist shell ist eben kein dos, auch wenn es so aussieht.
Die Rechtschreibfehler in diesem Beitrag sind nicht urheberrechtlich geschützt.
Jeder der einen findet darf ihn behalten und in eigenen Werken weiterverwenden.

3

07.02.2006, 17:11

Achsooo geht das! :crazy:
Ich habe mir das alles wirklich zu einfach vorgestellt...(bin eben DOS gewohnt)
Ich werde das alles mal Testen und dann meinen Kommentar dazu posten!

1000Dank!

Gruß
ENTARO
Das könnte ihre Werbefläche sein!

bonsai

Prof.Dr. Klugschiss

  • »bonsai« ist männlich

Beiträge: 1 486

Wohnort: N.de

Beruf: Informatiker

  • Nachricht senden

4

07.02.2006, 17:39

DOS und einfacher?

Pah! Dann definiere mal eine Variable mit dem Rueckgabewert eines Befehls...

Wie einfach! @*#!

Da lobe ich mir die Bash. :)
Die erste programmgesteuerte Rechenmaschine (Z1) wurde Mitte der 30er Jahre als "nicht patentwürdig" eingestuft. Warum versaut mir das Ding 50 Jahre später immer noch den Tag?

5

07.02.2006, 17:48

Ich habe nur gesagt, dass ich DOS gewohnt bin, dass es einfacher ist, hast nun spätestens du mit deinem Beispiel wiederlegt :applaus:
Das könnte ihre Werbefläche sein!

linuxerr

Prof. Dr. Schlaumeier

  • »linuxerr« ist männlich

Beiträge: 8 557

Wohnort: Mecklenburg, zur Entwicklungshilfe in Chemnitz/Sachsen ;-)

  • Nachricht senden

6

07.02.2006, 17:51

@entaro,

das hört sich wirklich kompliziert an, das liegt aber daran, dass es sich bei linux um ein multiuser/multitaskingsystem handelt an dem zugleich viele user mehrere programme gleichzeitig starten können. deshalb macht es sinn, das nicht einfach etwas auf DEM bildschirm ausgegeben wird, denn davon sind vielleicht 2 oder 10 oder 200 angeschlossen, also wo soll deine echo ausgabe hin? auf alle?? da werden sich aber einige user beschweren :teufel: also gibt die bash eine art routing der ein/ausgabewege vor, das heisst sie legt fest von wem die daten kommen (aufrufendes terminal) und wohin sie gehen (wieder zum rufenden terminal zurück) ein kontaktieren anderer terminals ist deshalb nicht so einfach.
das mag dir alles sehr umständlich und unsinnig vorkommen weil du allein an deinem rechner arbeitest, aber wenn du das erste mal kommandoausgaben durch eine pipe an andere kommandos weitergegeben hast wirst du staunen wie flexibel das system ist, wenn die kommandos eben NICHT direkt auf den bildschirm schreiben.
Die Rechtschreibfehler in diesem Beitrag sind nicht urheberrechtlich geschützt.
Jeder der einen findet darf ihn behalten und in eigenen Werken weiterverwenden.

7

07.02.2006, 18:22

Also di Ausgabe möchte ich nur an dem Bildschirm haben, wo ich gerade davor sitze. Einen anderen User würde meine Ausgabe auch wohl kaum interessieren...
Also bedeutet "> /dev/console" Ausgabe auf alle (!) Konsolen?

Wie bringe ich der bash bei wohin meine ein-/ausgaben sollen?

Ich liebe Flexibilität! =D
Das könnte ihre Werbefläche sein!

bonsai

Prof.Dr. Klugschiss

  • »bonsai« ist männlich

Beiträge: 1 486

Wohnort: N.de

Beruf: Informatiker

  • Nachricht senden

8

07.02.2006, 18:48

indem Du das "richtige" Geraet ansprichst

Beispiel:

lx100:/etc# ps
PID TTY TIME CMD
25566 pts/22 00:00:00 bash
25582 pts/22 00:00:00 ps
lx100:/etc# echo "test" > /dev/pts/22
test

Danke fuer den Applaus! ;)

Kind regards,
Bernd
Die erste programmgesteuerte Rechenmaschine (Z1) wurde Mitte der 30er Jahre als "nicht patentwürdig" eingestuft. Warum versaut mir das Ding 50 Jahre später immer noch den Tag?

linuxerr

Prof. Dr. Schlaumeier

  • »linuxerr« ist männlich

Beiträge: 8 557

Wohnort: Mecklenburg, zur Entwicklungshilfe in Chemnitz/Sachsen ;-)

  • Nachricht senden

9

07.02.2006, 18:50

ok, damit wir nicht aneinander vorbeireden ein paar fragen:
1. es ist dir klar, dass der code

Quellcode

1
2
3
#!/bin/sh
read a
echo "Da isser $a"

funktioniert, wenn du das script selbst in deiner bash (deinem terminal) startest? ja?
2. dieses script wird jetzt jedoch (soweit ich das verstanden habe) durch einen anderen systemuser oder systemprozess gestartet und soll GENAU DICH nach einer variable fragen, die du dann eingeben kannst und die das script dann weiterverwendet. ist das so richtig??
3. du musst dir jetzt das routing der anfrage überlegen. das script kann jetzt also nicht einfach ausgeben (die standardkanäle zeigen auf den aufrufenden user/prozess), denn wohin soll es ausgeben. hast du ein xterminal auf oder zehn stück? oder eine der 6 tty-konsolen oder bist du über die ssh von einem entfernten rechner angemeldet? das zu ermitteln ist kein problem (who) aber was soll das script machen, wenn du an mehreren terminals angemeldet bist?

sauber könnte man sowas durch einen kleinen server/clientprozess (nicht erschrecken) oder durch eine pipe lösen.
Die Rechtschreibfehler in diesem Beitrag sind nicht urheberrechtlich geschützt.
Jeder der einen findet darf ihn behalten und in eigenen Werken weiterverwenden.

10

08.02.2006, 08:52

@bonsai
Vielen Dank, ich wers mal testen! :applaus:

@Linuxerr

Also zu 1. Ja, das ist mir klar, wenn ich es manuell starte, erhalte ich mein Ergebnis, automatisch eben nicht, da es ja nichtmehr in meiner bash liegt...müsste so stimmen.

2. Dieses Script wird richtigerweise durch ein anderes Script aufgerufen und soll mich nach dieser besagten Variable fragen, stimmt.

3. Ich sitze vor einer Konsole (dieses Linux ist eine abgespeckte Version, also keine grafische Oberfläche), und bin an dieser auch angemeldet. Wenn ich nun meinen Stick einstecke, habe ich darauf 2 Scripten. Das erste (init.sh) erstellt mir 2 Verzeichnisse:
- /bin/test
- /mnt/usb
Zudem mountet sich der Stick mit Hilfe dieses Scripts nach /mnt/usb und kopiert das 2. Script nach /bin/test und startet dieses. Alles funktioniert, nur bis das mit ein-/ausgaben.
Ich möchte dieses Script logischerweise auch erweitern, aber zunächst möchte ich mal dieses Beispiel verstehen.
Das könnte ihre Werbefläche sein!

bonsai

Prof.Dr. Klugschiss

  • »bonsai« ist männlich

Beiträge: 1 486

Wohnort: N.de

Beruf: Informatiker

  • Nachricht senden

11

08.02.2006, 10:36

USB-Stick

...ist in den Schreibzugriffen limitiert - Ein "genutztes Linux" koennte diese an einem Tag schaffen.
Die erste programmgesteuerte Rechenmaschine (Z1) wurde Mitte der 30er Jahre als "nicht patentwürdig" eingestuft. Warum versaut mir das Ding 50 Jahre später immer noch den Tag?

12

08.02.2006, 10:50

Deshalb kopiere ich mir auch eine Script Datei auf die Platte, um von dort aus weiterarbeiten zu können.
Das könnte ihre Werbefläche sein!

linuxerr

Prof. Dr. Schlaumeier

  • »linuxerr« ist männlich

Beiträge: 8 557

Wohnort: Mecklenburg, zur Entwicklungshilfe in Chemnitz/Sachsen ;-)

  • Nachricht senden

13

08.02.2006, 11:06

ok, ich will das mal kurz an einem beispiel zeigen. wir haben einen server und einen clienten. der server benötigt einen variablenwert, den ihm der client mitteilen muss.
mal ein kurzez beispiel mit einer pipe.

1. ich lege mir eine pipe an. das ist genaugenommen ein FIFO speicher in den der eine prozess etwas auf der einen seite hineinschicken kann und ein anderer prozess es auf der anderen seite abholen muss und umgekehrt. eine art rohrpost. also legen wir den fifo an
mknod -m777 /tmp/rohr p der einfachheit halber habe ich alle rechte (777) freigegeben, sollte in der praxis anders sein =D.
jetzt siehst du im verzeichnis /tmp eine eigenartige datei

Zitat


root@satellit:/home/frank# ls -al /tmp/rohr
prwxrwxrwx 1 root root 0 2006-02-08 10:42 /tmp/rohr
root@satellit:/home/frank#


wenn du dich jetzt auf einer konsole zb als root anmeldest, kannst du etwas in die pipe hineinschieben, zb mit
echo "Hallo, wer da?" > /tmp/rohr
das echo wird hängenbleiben, da die pipes ungepuffert sind. echo wird also erst von seiner "last" befreit, wenn jemand den string auf der anderen seite des rohres abholt.

also gehst du auf eine andere konsole und meildest dich als user an und holst den inhalt der pipe ab mit
cat < /tmp/rohr und auf deinem bildschirm erscheint der text. umgekehrt geht das genauso. der user schreibt was rein und root holt es auf der anderen seite ab. damit ist die pipe sozusagen der gemeinsame treffpunkt der beiden prozesse über den sie kommunizieren.
mit diesem wissen kannst du jetzt einen kleinen server aufsetzen und einen clienten programmieren.

2. der server, der von root gestartet wird und der einen variablenwert vom clienten lesen will:

Quellcode

1
2
3
4
5
6
7
8
#!/bin/sh
# begrüßungstext in die pipe schieben und warten bis abgeholt wird
echo "gib bitte den wert ein:" > /tmp/rohr
# eingabewert des clienten aus der pipe lesen und read übergeben
read WERT < /tmp/rohr
# ergebnisinformation an den clienten senden
echo "WERT= $WERT" > /tmp/rohr
#.... so und jetzt mach ich mit der variable lauter blöde sachen .....

das teil wird mit ausführungsrechten für root versehen und von root aufgerufen.

3. nun der client:

Quellcode

1
2
3
4
5
6
7
8
9
#!/bin/sh
# abholen der begrüßung aus der pipe
cat < /tmp/rohr
einlesen einer usereingabe in WERT
read WERT
# ausgabe von WERT in die pipe
echo $WERT > /tmp/rohr
# auslesen der antwort
cat < /tmp/rohr

er wird vom user gestartet und nimmt mit dem server kontakt über die pipe auf.
damit kann man auch ein einfaches talk-terminal aufsetzen, mit dem sich zwei user unterhalten können, die pipe kann dann auch eine netzwerkpipe sein, also zwischen entfernten hosts laufen und und und....
das war nur ein einfaches beispiel für ipc (inter-process-communication) aber ich wollte nur das prinzip zeigen.
ich hoffe, das beispiel hilft dir etwas.

gruss
Die Rechtschreibfehler in diesem Beitrag sind nicht urheberrechtlich geschützt.
Jeder der einen findet darf ihn behalten und in eigenen Werken weiterverwenden.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »linuxerr« (08.02.2006, 11:08)


14

08.02.2006, 11:20

Zum Glück habe ich damals in der Schule aufgepasst! Jetzt erinnere ich mich an das Server/Client Prinzip wieder :)

Ich glaube, ich erkläre das Gesamte Konzept, welches ich mir für mein Script vorgestellt habe, damit es zu keinem Missverständnis kommt.

Ich habe einen Stick. Darauf sind folgende Dateien/Ordner:
-a
-b
-init.sh
-test.sh

Bei a und b handelt es sich um Ordner, welche wiederum eine init.sh beinhalten. init.sh und test.sh sind natürlich scripte.
Sobald ich den Stick instecke, startet mir diese init.sh, welche die Aufgabe hat, einmal den Stick zu mounten und die test.sh nach /bin/test zu kopieren und anschließend auszuführen. Bis hierher funktioniert alles tadellos. Die test.sh wird mir ebenfalls ausgeführt und ich erhalte folgendes ergebnis:

Geben sie bitte einen Ordnernamen ein: (dank des hinweises ">/dev/console")

Natürlich geht von hier weg nichts mehr weiter, denn nun fehlt mir die Eingabe für die Ordnerwahl (sprich a oder b). Das im Ordner enthaltene Script sollte anschließend ausgeführt werden.

Da dies nur eine einzelne Maschine ist, kann ich auch keinen anderen User beeinflussen.
Das könnte ihre Werbefläche sein!

linuxerr

Prof. Dr. Schlaumeier

  • »linuxerr« ist männlich

Beiträge: 8 557

Wohnort: Mecklenburg, zur Entwicklungshilfe in Chemnitz/Sachsen ;-)

  • Nachricht senden

15

08.02.2006, 12:25

ich glaube ich habe jetzt verstanden was du willst. ich will es mal mit dem satz "es soll gehen wie bei windows" ausdrücken. es soll ein x beliebiger user einen stick anstecken können, der wird von root!!! gemountet und dann eines der userscripte !!!! von root!!! auf das system kopiert und mit rootrecht!!!! ausgeführt. und dann soll noch ein im prinzip x-beliebeiger user nach optionen gefragt werden um bestimmte verzeichnisnamen zu übernehmen. ich denke mal so ist das korrekt oder??
wenn du mit dem projekt fertig bist, kannst du dann durch entfernen des x hinter dem usernamen in der passwd sämtliche passworte abschalten. geht einfacher und läuft auf das selbe hinaus. mache ein chmod 777 * auf alle daten im dateisystem, fahr die kiste im single-user-modus hoch und du hast das dos, das du dir wünscht (read geht dann auch)

korrekt so, oder?

ps: zitat "ich bin der einzige user, beeinflusse keinen anderen" und am netz ist die maschine auch nicht??? armer kleiner linux-rechner :'(
Die Rechtschreibfehler in diesem Beitrag sind nicht urheberrechtlich geschützt.
Jeder der einen findet darf ihn behalten und in eigenen Werken weiterverwenden.

Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von »linuxerr« (08.02.2006, 12:30)


16

08.02.2006, 14:03

So ähnlich soll es ablaufen, nur mit einem Unterschied:

Ich bin der x beliebige User und bin schon als root angemeldet. Ich erhalte dann die Frage, welches Verzeichnis ich verwenden/ausführen will und ich wähle es dans aus.
Sprich ich drücke bei Nachfrage "a" und das Script, welches sich im Ordner a befindet wird ausgeführt.

Da ich mich ja als root anmelde, habe ich ja schon alle Rechte, die ich benötige.

Ich arbeite Offline, an einer Stand Alone Linux Maschine, nichts mehr. :chinese:

Kann es sein, dass wir aneinander vorbeireden? :keineahnung:
Das könnte ihre Werbefläche sein!

bonsai

Prof.Dr. Klugschiss

  • »bonsai« ist männlich

Beiträge: 1 486

Wohnort: N.de

Beruf: Informatiker

  • Nachricht senden

17

09.02.2006, 09:05

chmod 777 * auf alle daten im dateisystem

Nein!

wenn es ein binary ist macht man das mit dem SUID-bit....

chown 0 bin-file
chmod 4744 bin-file

(Niemand darf lesen, schreiben - dafuer dürfen die Gruppe und alle ausführen:44)

Das Binary wird mit den Besitzerrechten (0=root) ausgeführt.

aus meinen Folien ("sonderrechte"):
sticky bit (1) Kann für Verzeichnisse gesetzt werden
Enthaltene Dateien können NUR entfernt oder umbenannt werden,
wenn:
- User Schreibberechtigung für Verzeichnis
UND
Eigentümer Datei / verzeichnis o. Superuser!
Wozu? Schreiben zulassen; Dateien anderer Benutzer nicht löschen (z.B.: /tmp)
Früher bei Files: Code (nicht Data!) im Speicher halten!
SUID (4)
Wird mit den Rechten des Besitzers ausgeführt.
(Beispiel: Passwortänderung!!!)
Nur Binfiles! Bei Dirs keine Bedeutung!
SGID (2) Wird mit den Rechten der Besitzergruppe ausgeführt.
Auf Dirs: neue Dateien in diesem Verzeichnis bekommen die Gruppe des Verzeichnisses
Die erste programmgesteuerte Rechenmaschine (Z1) wurde Mitte der 30er Jahre als "nicht patentwürdig" eingestuft. Warum versaut mir das Ding 50 Jahre später immer noch den Tag?

linuxerr

Prof. Dr. Schlaumeier

  • »linuxerr« ist männlich

Beiträge: 8 557

Wohnort: Mecklenburg, zur Entwicklungshilfe in Chemnitz/Sachsen ;-)

  • Nachricht senden

18

09.02.2006, 18:04

@etaro
also dann würde ich dir folgendes vorschlagen.
du legst die pip wie oben beschrieben und das clientprogramm bindest du in der .bashrc an einen signalhandler mit trap. vom root-script wird nun das signal an dein terminal gesendet und das script startet auf deiner console und fordert dich zur eingabe des parameters auf der dann in die pipe geschickt wird.

oder du horchst die konsoleneingabe direkt mit dd ab.

bei all diesen lösungen wird aber immer ein auf deiner konsole laufender prozess gestört werden.
Die Rechtschreibfehler in diesem Beitrag sind nicht urheberrechtlich geschützt.
Jeder der einen findet darf ihn behalten und in eigenen Werken weiterverwenden.

linuxerr

Prof. Dr. Schlaumeier

  • »linuxerr« ist männlich

Beiträge: 8 557

Wohnort: Mecklenburg, zur Entwicklungshilfe in Chemnitz/Sachsen ;-)

  • Nachricht senden

19

10.02.2006, 19:12

@etaro,

die sache hat mir keine ruhe gelassen und fängt so langsam an mir zu gefallen. hier also ein ausführlicher lösungsvorschlag von mir
1. eine pipe anlegen (wie oben
mknod -m 660 /tmp/rohr p
2. einen freien signalhandler auswählen mit kill -l. dort siehst du eine liste der verwendeten signalhandler. bei mir ist die 32 unbenutzt und die nehme ich auch.
3. client in der bash des users installieren, zb in .bashrc oder .profile im homeverzeichnis des users. die datei (als user) öffnen und folgende zeilen ergänzen

Quellcode

1
2
3
4
5
6
7
8
9
10
# funktion stickmessage holt zuerst aus der pipe den befehl ab, führt ihn aus
# und schickt das ergebnis in die pipe zurück
stickmessage(){
 BEFEHL=$( cat < /tmp/rohr )
 WAHL=$( $BEFEHL )
 echo $WAHL > /tmp/rohr
}

# mit trap wird festgelegt, dass die funktion bei signal 32 gestartet wird
trap stickmessage 32

so, das war die clientseite. jetzt kommt

4.der root-teil

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#!/bin/sh
# server-script
# welcher user soll auf tty informiert werden
USER=frank
# dateiname der pipe
PIPENAME=/tmp/rohr
# festgelegter signalhandler
SIGNAL=32
# welche bschs hat der user offen?
BASHLISTE=$( pgrep -u${USER} -d" " bash )
BASHPID=""
for BPID in ${BASHLISTE}
do
 # zaehlt die zeilen in der liste der kindprozesse
 KINDPROZESSE=$( pgrep -l -u${USER} -P ${BPID} | wc -l )
 # ist es eine bash ohne gestarteten kindprozess? (freie konsole)
 if [ "$KINDPROZESSE" == "0" ]; then
  # ja, pid speichern und suche beenden
  BASHPID=$BPID
  break
 else
  # nein, die konsole ist belegt, aber trotzden erstmal merken und weitersuchen
  BASHPID=$BPID
 fi
done

# wurde eine bash gefunden?
if [ "${BASHPID}" != "0" ]; then
 # ja, pipe für den user freigeben
 chown ${USER}.root ${PIPENAME}
 chmod 660 ${PIPENAME}
 # befehl zusammenbauen, der beim user auf der konsole ausgeführt wird
 BEFEHL="dialog --stdout --menu hallo 20 30 10 1 hallo 2 hier 3 nein"
 # signalhandler an die bash des users zum start des klienten schicken
 kill -32 ${BASHPID}
 # befehl in die pipe senden (client holt den inhalt ab und führt ihn aus
 echo "$BEFEHL" > /tmp/rohr
 #auf die antwort warten
 read WERT < /tmp/rohr
 # antwort gelesen und bearbeiten  
 echo $WERT
else
 echo "Der user ${USER} ist nicht eingelogt!"
fi

ich habe das ganze auf die bash zugeschnitten. im ersten teil oben wird nach der pid einer offenen bash (ohne laufende anwendung gesucht.
wenn eine solche pid gefunden wurde, wird die pipe für lese und schreibzugriffe des users freigegeben, und der signalhandler an die bash des users geschickt, sodass dort der klient startet und an der pipe wartet. jetzt wird der dialogbefehl in die pipe geschickt und vom clienten abgeholt und ausgeführt. wenn der fertig ist gibt er das ergebis in die pipe, wodurch es hier mit read abgeholt wird.
nun kann root die daten weiter verarbeiten. ich lasse den dialogbefehl hier bei root zusammenstellen, sodass er zb dynamisch aus der verzeichnisliste des sticks automatisch erzeugt werden kann (also neues verzeichnis auf dem stick -> neuer menüeintrag auf der konsole des users.
probiers mal aus.
öffne eine konsole als root und eine als DER user. starte auf der root konsole da server-script und du wirst sehen, das auf ser userkonsole dialog geöffnet wurd, user macht auswahl und drückt (2x??) enter und schon ist die auswahl bei root angekommen. das script könnte noch einfach verfeinert werden, indem man testet ob eine der freien userkonsolen mit stdin verbunden ist (also am bildschirm gerade auf) und dort wird es dann hingeschickt.
ich hoffe strcat, chieps oder chuky schauen mal vorbei und weisen mich auf die mängel hin, man lernt nie aus. :)
Die Rechtschreibfehler in diesem Beitrag sind nicht urheberrechtlich geschützt.
Jeder der einen findet darf ihn behalten und in eigenen Werken weiterverwenden.

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »linuxerr« (10.02.2006, 19:24)


20

13.02.2006, 09:10

@ Linuxerr

Erstmal Danke für die Mühe die du dir machst! :)
Einen kleinen Fehler muss ich jedoch anmerken: Mein Username lautet eNtaro :(), aber egal!

Um nun alles richtig zu verstehen:
Sobald ich den Stick einstecke, startet mir die init.sh. Ich habe jedoch das Problem, dass diese Linuxversion derart abgespeckt ist, dass nichtmal "dialog" drauf ist :'( Deshalb muss ich bei echo, read usw bleiben, denn ich will keine installation starten, da so gut wie kein speicherplatz zur verfügung steht.
Ansonsen ist deine Idee wohl die einzig brauchbare und sinnvolle Lösung :applaus:
Das könnte ihre Werbefläche sein!

Thema bewerten