Shell Skript: Verzeichniseingabe mit tab completion

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Kobe
Beiträge: 45
Registriert: 30.11.2008 23:59:01

Shell Skript: Verzeichniseingabe mit tab completion

Beitrag von Kobe » 31.12.2008 16:47:49

Hallo

Ich möchte in einem Skript erfragen, in welchem Ordner es arbeiten soll

Code: Alles auswählen

#/bin/sh
echo "Welcher Ordner?"
read dir
echo $dir
Nun hat man selten Lust, einen tiefen Verzeichnispfad ohne tab completion einzugeben. Wie kann ich das an der Stelle realisieren?

Wenn ich es so mache und tab-Taste drücke, fügt er ein "echtes" Tab ein. Oder liegt es an der Shell? Ich habe gerade gar keine Ahnung, wo man da schrauben müsste und ob es überhaupt geht.

mfg
Stephan

Methusalix

Re: Shell Skript: Verzeichniseingabe mit tab completion

Beitrag von Methusalix » 31.12.2008 17:55:57

Hallo,

completion ist ein feature der shell; siehe dazu z.B.

Code: Alles auswählen

aptitude show bash-completion
read erwartet eine x-beliebige Zeichenfolge um diese in einer Variablen
zu speichern und da ist <tab> erstmal auch nur ein Zeichen. <tab> dient ja auch nicht nur
zur Vervollständigung sondern auch zur Anzeige mehrerer Möglichkeiten, aus denen es dann
auszuwählen gilt. Dies müsstest Du dann ja auch auswerten können. Beschreibe Dein
Vorhaben doch mal konkreter - vielleicht ist dann eine Lösung einfacher denkbar.
Gruß Matthias

Benutzeravatar
Sia386
Beiträge: 186
Registriert: 03.11.2008 20:45:33
Lizenz eigener Beiträge: GNU Free Documentation License
Wohnort: Sydøstjylland

Re: Shell Skript: Verzeichniseingabe mit tab completion

Beitrag von Sia386 » 01.01.2009 02:04:15

wenn du nur einmal ein tiefe directory eintipst, dann wird in history gespeichert. also um wieder drauf zu kommen musst du nur die ersten paar buchstaben eingeben dann mit ^ pfeile autocompletion tun. das ging am schnellsten. also probier es mal das hier:

Code: Alles auswählen

# Bash autocomplete mit ^ pfeile.
bind '"\e[A":history-search-backward'
bind '"\e[B":history-search-forward'
in ~/.bashrc hinzufuegen.
“Unmenschen gibt es, aber keine Untiere.”
ـــ Karl Julius Weber

yeti

Re: Shell Skript: Verzeichniseingabe mit tab completion

Beitrag von yeti » 01.01.2009 13:03:16

In BASH geht das mittels ...

Code: Alles auswählen

read -p "Welcher Ordner? --> " -e dir
... aber dann sollte das Skript nicht behaupten, mit SH laufen zu können...

Kobe
Beiträge: 45
Registriert: 30.11.2008 23:59:01

Re: Shell Skript: Verzeichniseingabe mit tab completion

Beitrag von Kobe » 09.01.2009 01:58:11

Hallo ihr

Genau das habe ich gesucht:
yeti hat geschrieben:

Code: Alles auswählen

read -p "Welcher Ordner? --> " -e dir
... aber dann sollte das Skript nicht behaupten, mit SH laufen zu können...
Du meinst, dass ich

Code: Alles auswählen

#!/bin/bash
brauche? Wieso läuft es bei mir auch mit sh? Sogar wenn ich es explizit mit sh starte läuft es

Code: Alles auswählen

/bin/sh meinskript.sh
mfg

yeti

Re: Shell Skript: Verzeichniseingabe mit tab completion

Beitrag von yeti » 09.01.2009 03:34:27

Kobe hat geschrieben:Wieso läuft es bei mir auch mit sh? Sogar wenn ich es explizit mit sh starte läuft es
Dann sind SH und BASH bei Dir wohl identisch. Das ist aber nicht bei allen Debians so und im richtigen Unixland eher sogar regelrecht selten...

Kobe
Beiträge: 45
Registriert: 30.11.2008 23:59:01

Re: Shell Skript: Verzeichniseingabe mit tab completion

Beitrag von Kobe » 09.01.2009 15:29:17

Code: Alles auswählen

stephan@debian:/bin$ ls sh -l
lrwxrwxrwx 1 root root 4 14. Nov 21:51 sh -> bash
Das erklärt es wohl.

Ist das jetzt schlecht und ich sollte ne Shell extra noch installieren oder ist es so auch ok?

Antworten