Eingabe mit Vorgabe

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
crischi
Beiträge: 93
Registriert: 08.02.2010 20:44:10
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Chemnitz

Eingabe mit Vorgabe

Beitrag von crischi » 12.04.2010 20:39:23

Hallo.
Folgende Problemstellung, möglichst mit Scripting und Std-SW zu lösen:
Ein Script soll einen Dateinamen abfragen, aber die Eingabezeile soll bereits vorbelegt ein. Oder anders ausgedrückt: Es steht ein einzeiliger Text da, den man editieren kann und der dann als Gesamtes einer Variablen zugeordnet wird.

Code: Alles auswählen

read - p "altername" VAR
scheidet aus, da 'altername' niemals in VAR landen kann und nicht mehr Teil der Eingabe ist.
Meine Versuche sind bisherfehlgeschlagen, einen Editor will ich aber auch nicht gleich dafür aufmachen.

lg,
crischi.
"The optimist proclaims that we live in the best of all possible worlds, and the pessimist fears this is true", James Branch Cabell

yeti

Re: Eingabe mit Vorgabe

Beitrag von yeti » 12.04.2010 21:20:49

In "BASH-4.1.2(1)-release" geht's... ab welcher Version aufwärts entzieht sich meiner Kenntnis, da ich Skripten in BASH für eine Unart halte und das eben nur spontan mal durch "help read" ausgeguggt habe...

Code: Alles auswählen

read -p "was guxxdu? : " -ei "supaporn.avi"

Benutzeravatar
crischi
Beiträge: 93
Registriert: 08.02.2010 20:44:10
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Chemnitz

Re: Eingabe mit Vorgabe

Beitrag von crischi » 12.04.2010 21:35:06

Werd ich mal probieren...
Ich bin zwar noch nicht lange dabei, aber ich mag die Bash. Für mich ist das die erste Anlaufstation. Meine Hierarchie ist:
1) einfache Aufgaben --- BASH ( ist für mich neu, da ich sowas von Windows noch ncht kenne)
3) komplexere --- Perl
4) 'richtige' Programme --- C
lg,
crischi.
"The optimist proclaims that we live in the best of all possible worlds, and the pessimist fears this is true", James Branch Cabell

yeti

Re: Eingabe mit Vorgabe

Beitrag von yeti » 12.04.2010 21:57:47

crischi hat geschrieben:Ich bin zwar noch nicht lange dabei, aber ich mag die Bash. Für mich ist das die erste Anlaufstation. Meine Hierarchie ist:
1) einfache Aufgaben --- BASH ( ist für mich neu, da ich sowas von Windows noch ncht kenne)
3) komplexere --- Perl
4) 'richtige' Programme --- C
BASH ist eine bis zum Erbrechen erweiterte Shell und da gibt es diverse inkompatible Konkurrenten. Systemrelevante Sachen sollte man sich garnicht erst angewöhnen in BASH zu schreiben, wenn man es auch auf anderen Systemen einsetzen will, denn BASH ist nicht überall in den Standardinstallationen enthalten. So sollte man sich beim Skripten darauf beschränken, was die SH kan...

Auch nicht jedes Unixchen hat Perl in der Standardinstallation... aber wenigstens gibt es zu Perl nicht 2 Hände voll quasikompatible bis toterweitere Pseudoperls... wenn Du Perl magst und Etwas für SH zu komplex ist, dann nimm doch lieber gleich Perl statt BASH... das ist dann portabler...

Am Liebsten würd ich allerdings überlall lesen: "Was nicht in SH geht, macht man in C"... :-D

Und was ist Punkt 2 in Deiner Liste? Höllisch geheim?

Benutzeravatar
crischi
Beiträge: 93
Registriert: 08.02.2010 20:44:10
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Chemnitz

Re: Eingabe mit Vorgabe

Beitrag von crischi » 13.04.2010 23:03:03

Ooops, hatte wohl einen Zähl-Bug in meinem BASH-Skript ;-)
es sollte natürlich 1), 2), 3) lauten.
Warum mir das passiert ist kann ich auch nicht erklären. Vielleicht ein Psychologe anwesend... :-)

Wenn die BASH tatsächlich so viele Verzweigungen hat, ist das natürlich ein Problem. Für mich ist das Scripting im Moment noch sehr wichtig um das Unix/Linux-System besser zu verstehen. Und da ich ein Mensch der Praxis bin, muss ich natürlich alles ausprobieren. So einen Luxus bin ich ja von Windows nicht gewöhnt. Dort gibt es ja nur Batch oder den Active-Scripting-Host (der mich aber abgeschreckt hat, da der nichtmal auf einem Standard-System installiert ist, da nehm ich lieber gleich Perl, das gibt es für fast jedes OS)

Und C, (für mich ganz klar) die Sprache der Sprachen.
Und soll ich nochwas verraten? Ich brauch diese ganze OO-Chose eigentlich nicht. Nein, ehrlich, wozu?
Mein Reizwort: Java.

lg,
crischi.
"The optimist proclaims that we live in the best of all possible worlds, and the pessimist fears this is true", James Branch Cabell

Benutzeravatar
Meillo
Moderator
Beiträge: 9254
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: Eingabe mit Vorgabe

Beitrag von Meillo » 14.04.2010 08:49:54

Dann melde ich mich mal zu Wort.
crischi hat geschrieben: Folgende Problemstellung, möglichst mit Scripting und Std-SW zu lösen:
Ein Script soll einen Dateinamen abfragen, aber die Eingabezeile soll bereits vorbelegt ein.
Erstmal grundsätzlich: Dieser Wunsch widerspricht dem Design von Terminals in Unix. (Erklärung nötig/gewünscht?) Deshalb wird es wohl keine Standardsoftware geben die das bietet.

Wenn das eine ganz bestimmte Version der bash kann, dann kann das für einen lokalen Hack akzeptabel sein, jedoch sollte man sich darüber klar sein, dass das höchst unportabel ist.

Wenn du dieses Feature *unbedingt* brauchst, dann solltest du es mit curses umsetzen. AFAIK sollte das damit möglich sein. Jedenfalls ist das der einzige halbwegs portable Ansatz der mit einfällt.

... aber es widerspricht den Konzepten von Unix, grundsätzlich.


yeti hat geschrieben: BASH ist eine bis zum Erbrechen erweiterte Shell und da gibt es diverse inkompatible Konkurrenten. Systemrelevante Sachen sollte man sich garnicht erst angewöhnen in BASH zu schreiben, wenn man es auch auf anderen Systemen einsetzen will, denn BASH ist nicht überall in den Standardinstallationen enthalten. So sollte man sich beim Skripten darauf beschränken, was die SH kan...
Ja, aber dazu ist eine ordentliche Portion Wissen nötig. Zudem gibt es gut begründete Ansätze Scripte speziell für ksh, bash, rc, oder ähnliches zu schreiben, wie man auch Scripte für perl, python, php schreibt. Der Eine setzt python voraus um sein Script auszuführen, der andere halt die ksh. (Nur muss im Shebang dann halt auch `/usr/bin/ksh' stehen.) Das ist nicht gerade meine Sichtweise, aber ich finde sie verständlich und aktzeptabel.

Am Liebsten würd ich allerdings überlall lesen: "Was nicht in SH geht, macht man in C"... :-D
Ich entgegne: Nimm für jede Aufgabe die angemessenen Werkzeuge. ;-)
Use ed once in a while!

Benutzeravatar
crischi
Beiträge: 93
Registriert: 08.02.2010 20:44:10
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Chemnitz

Re: Eingabe mit Vorgabe

Beitrag von crischi » 16.04.2010 15:42:53

Ich denke zu wissen, warum es dem Design des Terminals widerspricht. Weil es eine Mischform ist, die es auf einem 'echten' Terminal (R232) wohl so nicht geben kann. Senden oder Empfangen, aber nicht in gesendetem Zeugs editieren. Alternativ wäre ein Fenster zur Eingabe eine Möglichkeit.
Korrigier mich, wenn ich falsch liege.


lg,
crischi.
"The optimist proclaims that we live in the best of all possible worlds, and the pessimist fears this is true", James Branch Cabell

roli
Beiträge: 3174
Registriert: 10.09.2003 17:39:58

Re: Eingabe mit Vorgabe

Beitrag von roli » 18.04.2010 12:37:39

Hi,

ich mach's so:

Code: Alles auswählen

#!/usr/bin/bash
echo -e "Bitte Datum eingeben: TT.MM.JJJJ\b\b\b\b\b\b\b\b\b\b\c"
read dat
echo "Datum = $dat <"
Roland


"Aber wenn du schon so unwissend bist, davon noch nicht gehört zu haben,
so will ich es doch als gut ansehen, daß du lieber einmal töricht fragst,
als weiterhin nichts von etwas zu wissen, das man doch wissen sollte."
aus "Die Edda des Snorri Sturluson", "Gylfis Täuschung"

cosmac
Beiträge: 4576
Registriert: 28.03.2005 22:24:30

Re: Eingabe mit Vorgabe

Beitrag von cosmac » 18.04.2010 14:23:46

hi,
crischi hat geschrieben:Ich denke zu wissen, warum es dem Design des Terminals widerspricht. Weil es eine Mischform ist, die es auf einem 'echten' Terminal (R232) wohl so nicht geben kann. Senden oder Empfangen, aber nicht in gesendetem Zeugs editieren.
das geht auch per RS232, da gibt es keinen Unterschied. Die Shell schickt Steuerzeichen ans Terminal und definiert so ein Eingabefeld (Zeile y, Spalte x, max. z Zeichen). Sobald die Enter-Taste gedrückt wird, schickt das Terminal den bearbeiteten Inhalt des Feldes zurück. Sowas wird/wurde gemacht.

Aber meistens läuft es etwas anders: Die Shell kann (wieder mit Steuerzeichen) den Cursor des Terminals positionieren und an beliebiger Stelle Zeichen überschreiben. Wenn sich die Shell den Inhalt der Eingabezeile merkt, kann sie auch per RS232 die gleichen Edit-Möglichkeiten anbieten. Witzigerweise arbeitet die Linux-Konsole auch auf dem Bildschirm nach exakt dem Verfahren. Linux hat das von den seriellen Terminals der VT100-Familie abgekupfert. Welche Möglichkeiten es da gibt sagt "man console_codes".

Übrigens gibt es serielle Terminals, mit denen man sogar ohne Bildschirm Eingaben bearbeiten kann: Schreibmaschinen mit Korrekturband -- Backspace entfernt das letzte Zeichen vom Papier.
Beware of programmers who carry screwdrivers.

yeti

Re: Eingabe mit Vorgabe

Beitrag von yeti » 18.04.2010 15:21:37

Code: Alles auswählen

#!/usr/bin/python --
import fcntl, sys, termios

for c in sys.argv[1]:
        fcntl.ioctl(1, termios.TIOCSTI, c)
:twisted:

cosmac
Beiträge: 4576
Registriert: 28.03.2005 22:24:30

Re: Eingabe mit Vorgabe

Beitrag von cosmac » 19.04.2010 12:05:25

yeti hat geschrieben:

Code: Alles auswählen

     fcntl.ioctl(1, termios.TIOCSTI, c)
uiih, ein echtes Liebhaberstück, ich bin begeistert 8)
Und ziemlich portabel ist es auch noch...
Beware of programmers who carry screwdrivers.

Antworten