Bash?

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Benutzeravatar
Neotux
Beiträge: 265
Registriert: 01.07.2002 13:51:21
Wohnort: Leipzig
Kontaktdaten:

Bash?

Beitrag von Neotux » 27.09.2002 19:45:57

hi,
wie kann ich mithilfe von bash zb ein "s" an die konsole geben, in der es ausgeführt wird?

Benutzeravatar
De Kus
Beiträge: 167
Registriert: 27.08.2002 14:32:24
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Pfalz

*grpbel*

Beitrag von De Kus » 27.09.2002 21:43:45

ich kann mich irren aber ist es nicht einfach "echo blablub"?
De Kus der Fehlerminator
Copyright (c) 2002-2005 De Kus

Love hurts, love strengthens ...

Benutzeravatar
Neotux
Beiträge: 265
Registriert: 01.07.2002 13:51:21
Wohnort: Leipzig
Kontaktdaten:

Beitrag von Neotux » 27.09.2002 22:27:21

nene... das mein ich nich... ich mein nich an den bildschirm, ich mein an die konsole...

Benutzeravatar
De Kus
Beiträge: 167
Registriert: 27.08.2002 14:32:24
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Pfalz

hmmm

Beitrag von De Kus » 27.09.2002 23:48:02

meinst du nun stderr oder die erste physische console (tty1 oder so)?
De Kus der Fehlerminator
Copyright (c) 2002-2005 De Kus

Love hurts, love strengthens ...

Benutzeravatar
feltel
Webmaster
Beiträge: 10368
Registriert: 20.12.2001 13:08:23
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Leipzig, Germany
Kontaktdaten:

Beitrag von feltel » 28.09.2002 14:35:55

wie wärs mit

Code: Alles auswählen

echo "1" > /dev/ttyX

Benutzeravatar
Neotux
Beiträge: 265
Registriert: 01.07.2002 13:51:21
Wohnort: Leipzig
Kontaktdaten:

Beitrag von Neotux » 29.09.2002 14:58:24

ne.. also folgendes....
ich hab ein Bash Programm, um wiederherstellen der daten. aber jede datei muss einzeln wiederhergestellt werden. und da wollt ich ein bash script schreiben, welches in einer do loop schleife die Tasten "s" und "pfeil runter" an die console, wo das programm läuft übergibt... versteht ihr was ich meine?

Benutzeravatar
pdreker
Beiträge: 8298
Registriert: 29.07.2002 21:53:30
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Nürnberg

Beitrag von pdreker » 29.09.2002 15:53:34

Wenn das die einzigen Tastendrücke sind, die das programm braucht kannst Du es so machen:

Code: Alles auswählen

yes bla | programm
damit bekommt das Programm in endloser Folge "bla" gesendet.

Ansonsten ist Feltels Methode schon die richtige. Eingabe ist Eingabe, wenn sie unter UNIX über ein Terminal kommt. Egal ob Du die Tastatur drückst, oder es per Echo direkt in das Terminal schickts.

Nochmal deutlich: Dein Programm läuft auf /dev/tty1 (erste viruelle Konsole). Wenn Du jetzt auf die zweiten virtuellen Konsole gehst, und Du machst

Code: Alles auswählen

echo -n Hallo! > /dev/tty1
dann erscheint das Hallo! auf der erstenvirtuellen Konsole]. Wenn da eine Shell läuft, wird das auf dem Bildschirm angezeigt, weil die Shell halt alle Tastendrücke auf dem Bildschirm ausgibt. Wenn da ein Programm läuft, das auf irgendwelche Tastendrücke wartet, dann wird das Programm die Tastendrücke "H", "a", "l", "l", "o" und "!" sehen... (Das "-n" bei dem echo bewirkt, dass nach der Zeile kein CRLF gesendet wird.

Patrick
Definitely not a bot...
Jabber: pdreker@debianforum.de

Benutzeravatar
Neotux
Beiträge: 265
Registriert: 01.07.2002 13:51:21
Wohnort: Leipzig
Kontaktdaten:

Beitrag von Neotux » 29.09.2002 16:58:01

hi, danke, hat mir erstmal weitergeholfen!
aber eine sache noch:
wie kann ich die Pfeiltaste an die konsole übergeben?

Benutzeravatar
De Kus
Beiträge: 167
Registriert: 27.08.2002 14:32:24
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Pfalz

hehe

Beitrag von De Kus » 29.09.2002 17:23:36

da musst du mal schauen, hba leider grad keien passend ascii tabelle gefunden, aber glaube man muss das zeichen 255 plus ein extra übergeben für die pfeitasten.

http://www.phanderson.com/C/ascii.html
hier die tabelle, also mit solltest du ein cursor nach unten zeichen erhalten :)
De Kus der Fehlerminator
Copyright (c) 2002-2005 De Kus

Love hurts, love strengthens ...

Benutzeravatar
Neotux
Beiträge: 265
Registriert: 01.07.2002 13:51:21
Wohnort: Leipzig
Kontaktdaten:

Beitrag von Neotux » 30.09.2002 17:15:05

also erstmal danke...
aber ma noch ne ganz dumme frage... wie führe ich die bash scripte aus?
habs probiert mit ./bashscript.sh kommt aber sowohl beim std. User als auch beim Superuser:
bash: ./rescue.sh: /bin/sh: bad interpreter: Permission denied
hab auch schon gegoogelt...

Benutzeravatar
abi
Beiträge: 2218
Registriert: 20.12.2001 19:42:56
Wohnort: München
Kontaktdaten:

Beitrag von abi » 30.09.2002 19:32:55

sh bashscript.sh ?

Benutzeravatar
feltel
Webmaster
Beiträge: 10368
Registriert: 20.12.2001 13:08:23
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Leipzig, Germany
Kontaktdaten:

Beitrag von feltel » 30.09.2002 19:38:03

Neotux hat geschrieben:also erstmal danke...
aber ma noch ne ganz dumme frage... wie führe ich die bash scripte aus?
habs probiert mit ./bashscript.sh kommt aber sowohl beim std. User als auch beim Superuser:
bash: ./rescue.sh: /bin/sh: bad interpreter: Permission denied
hab auch schon gegoogelt...
x-bit nicht gesetzt.

Code: Alles auswählen

chmod ugo+x datei
wenn alle ausführen dürfen

Benutzeravatar
Neotux
Beiträge: 265
Registriert: 01.07.2002 13:51:21
Wohnort: Leipzig
Kontaktdaten:

Beitrag von Neotux » 01.10.2002 16:39:20

hi, mit dem ausführen klappt soweit alles...
nur hab ich ein Problem mit der tastaurübergabe...
wenn ich das programm so schreibe, wie ihr gesagt habt ">tty1" dann wird das ja auf die "nonXconsolen" projeiert.
kann ich das durch einen Befehl auch auf die consolen, die unter X laufen übertragen?

Benutzeravatar
pdreker
Beiträge: 8298
Registriert: 29.07.2002 21:53:30
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Nürnberg

Beitrag von pdreker » 01.10.2002 17:46:12

Die xterms (Konsole von KDE wenigstens) finden sich unter /dev/ptypX (wobei X eine Zahl ist!)

Patrick
Definitely not a bot...
Jabber: pdreker@debianforum.de

Benutzeravatar
Neotux
Beiträge: 265
Registriert: 01.07.2002 13:51:21
Wohnort: Leipzig
Kontaktdaten:

Beitrag von Neotux » 01.10.2002 19:02:40

also ich weiss nicht... irgendwie gehts nich... liegt der fehler bei mir oder hast du dich vertippt?
also ich hab geschrieben:

Code: Alles auswählen

#!/bin/sh
echo -n s > /dev/ptyp1

Benutzeravatar
pdreker
Beiträge: 8298
Registriert: 29.07.2002 21:53:30
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Nürnberg

Beitrag von pdreker » 01.10.2002 19:46:47

Hab mich zwar nicht vertippt, war aber trotzdem falsch ;-)

/dev/ttypX sollte es sein...

Patrick
Definitely not a bot...
Jabber: pdreker@debianforum.de

Benutzeravatar
Neotux
Beiträge: 265
Registriert: 01.07.2002 13:51:21
Wohnort: Leipzig
Kontaktdaten:

Beitrag von Neotux » 01.10.2002 20:14:15

hey...
ich hab das jetzt in ttyp1 umgeändert... da kommt folgendes:

Code: Alles auswählen

./rescue.sh: /dev/ttyp1: Input/output error

Benutzeravatar
pdreker
Beiträge: 8298
Registriert: 29.07.2002 21:53:30
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Nürnberg

Beitrag von pdreker » 01.10.2002 20:22:21

Öffne 'mal die Shell deines Vertrauens unter X und mach dann "lsof|grep Shellname", da sollte das richtige Device bei sein. (Notfalls apt-get install lsof, das sollte eh immer parat haben)
(Bei mir funktioniert's...)

Patrick
Definitely not a bot...
Jabber: pdreker@debianforum.de

Benutzeravatar
Neotux
Beiträge: 265
Registriert: 01.07.2002 13:51:21
Wohnort: Leipzig
Kontaktdaten:

Beitrag von Neotux » 01.10.2002 22:03:43

hi,
also lsof hab ich installiert und hab auch "lsof|grep Shellname" eingegeben. aber irgendwie rüht sich nix.. also der springt einfach in die nächste Zeile ohne ausgabe

Benutzeravatar
pdreker
Beiträge: 8298
Registriert: 29.07.2002 21:53:30
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Nürnberg

Beitrag von pdreker » 01.10.2002 22:08:48

lsof|grep bash (falls bash Deine Shell ist... ich meinte nicht xterm oder so, sorry war unklar ausgedrückt...)
Die Shell sollte irgendein /dev offen haben, das ist normalerweise das Terminal...

Patrick
Definitely not a bot...
Jabber: pdreker@debianforum.de

Benutzeravatar
abi
Beiträge: 2218
Registriert: 20.12.2001 19:42:56
Wohnort: München
Kontaktdaten:

Beitrag von abi » 01.10.2002 22:09:25

Shellname sollte ja auch gegen den namen der shell ersetzt werden denk ich ;)

Benutzeravatar
abi
Beiträge: 2218
Registriert: 20.12.2001 19:42:56
Wohnort: München
Kontaktdaten:

Beitrag von abi » 01.10.2002 22:09:52

schon wieder ... 8O 8O 8O 8O

ernohl
Beiträge: 1181
Registriert: 04.07.2002 08:11:56
Wohnort: HL

Beitrag von ernohl » 02.10.2002 09:32:23

Hi Leute,

kann es sein, dass ihr fürchterlich aneinander vorbeiredet?

@neotux: Beschreibe noch einmal (mit konkretem Beispiel), was Du vorhast. Was meinst Du mit "einzeln rekonstruieren", wenn Du doch jede Datei mit "s" bestätigen willst?

Dann wollt ihr die Ausgabe von einem tty auf ein anderes umlenken. Schön und gut und kein Problem, aber damit wird diese ZK noch lange nicht als stdin von dem dort laufenden Programm benutzt. Ich habe das zwar nicht in der bash getestet, aber ich kenne keine shell, die sich so verhält. Lässt sich leicht testen, könnte ich aber erst heute abend.

Beispiel:
(1. tty : /dev/ttyp5)
read ein

(2.tty)
echo hallo >/dev/ttyp5

(1. tty)
- "hallo" sollte zu sehen sein, shell prompt ist aber nicht da (oder?)
<Enter>
echo $ein
--> ein ist leer (oder?)

Kurz und gut, ich denke, was Du vorhast, lässt sich ganz simpel ohne Klimmzüge lösen, aber was hast Du genau vor?
Gruß
ernohl

Benutzeravatar
Neotux
Beiträge: 265
Registriert: 01.07.2002 13:51:21
Wohnort: Leipzig
Kontaktdaten:

Beitrag von Neotux » 02.10.2002 16:26:29

hi...
also
@try:
ich verwende eterm und hab natürlich schon versucht bash durch eterm zu ersetzen, aber ohne erfolg.

@ernohl:
erstma fand ich dienen einwurf gut, weil ich auch das gefühl hatte, an den anderen vorbei zu reden.
ich hatte das thema ja schonmal gepostet, leider hat mi da niemand geantwortet, und deshalb dachte ich, es wüsste keiner uind hab es nich weiter geschildert.
aber nochmal :)
ich hab ein dateirecover Programm für das extFilesystem. Leider ist es so, das man damit keine vereichnisse wiederherstellen kann, sondern nur einzelne datein.
da ich 8,8GB verloren hab, hab ich mir gedacht, das es sich doch wohl eher müsam gestaltet, die alle von hand zu retten. (arbeisschritte: "s" für sichern der datei drücken, dann pfeil nach unten um zur nächsten zu gelangen, wieder "s"...) und ich hatte vor diese Tastenkombination in einer beinahe endlosschleife an das Programm(undelete) zu übergeben.
(undelete hab ich mal gescreenshotet, und es auf meinen server gestellt, also iss das bild nur so lange erreichbar, bis ich reboote, also vorausichtlich heut abend.)
[img]80.135.234.55/undelete.png[/img]

*gruss* Neotux

ernohl
Beiträge: 1181
Registriert: 04.07.2002 08:11:56
Wohnort: HL

Beitrag von ernohl » 02.10.2002 16:59:05

Ok., am besten wäre es natürlich, Du findest eine Möglichkeit, Dein recover-Programm nicht interaktiv zu starten.
Wenn das nicht möglich ist, dann versuche das Programm (ungetestet) etwa so zu starten:
recoverprog < <deininputfile>

Nun erzeugst Du die Datei <deininputfile> mit genau den gewünschten Tastenkombinationen ('s', Pfeiltaste). Denke daran, dass eine neue Zeile ein <Return> bedeutet. Ganz unelegant erzeugst Du einfach entsprechende viele (nach der Anzahl der zu rekonstruierenden Dateien) Einträge.
Etwas eleganter wäre es, irgendwie mit einer named pipe zu arbeiten, die Du parallel in einer Schleife fütterst. Ich will mich aber ohne praktischen Test jetzt nicht zu weit aus dem Fenster lehnen... :wink:
Gruß
ernohl

Antworten