Im Postgresql-Forum http://www.pg-forum.de/f54/tabulator-psql-shell-4577/#post25188 habe ich ein Problem geschildert, von dem sich zeigt, dass es gar nicht postgresql-spezifisch ist, sondern mit Shells per se zu tun hat.
Und zwar schreibe ich einen mit Tabulatoren eingerückten Text in einem Editor - beispielsweise sowas:
CREATE TABLE kunde ( id serial, name character varying (20) );
Im Editor ist der Tabulator auf eine 8er-Weite eingestellt, und Tab=Tab, nicht x Leerzeichen.
Nun markiere ich das mit der Maus, und wechsle in die Shell, und gebe ein
echo "
und hinter den Anführungsstriche versuche ich meinen Code einzufügen, also klicke ich mittlere Maustaste, und es erscheint
1 2 3 4 5 6 7 8 | echo "CREATE TABLE kunde ( > id Display all 353 possibilities? (y or n) > id amecharacter varying (20), > );" CREATE TABLE kunde ( id amecharacter varying (20) ); |
In Zeile 5 füge ich unverdrossen am Ende die schließenden Anführungsstriche ein, und ENTER, woraufhin das irgendwie zusammengestaucht wird, die Tabulatoren verschwinden, und hier auch irgendwie der Zeilenumbruch.
Oben sieht man, dass der Tab nach dem id eine command-completition ausgelöst hat, und mir 353 mögliche, aber natürlich völlig unsinnige Füllungen angeboten werden.
Allerdings ist das Resultat völlig konsistent mit dem was passiert, wenn ich das so in der Shell eingebe, mit Tab getippt, nicht per cut'n'paste. Und zwar, jeweils bei auskommentierung von bash_completition in ~/.bashrc .
# if [ -f /etc/bash_completion ]; then # . /etc/bash_completion # fi
Ohne die Auskommentierung sieht es aber ähnlich aus, nur das mir auch noch alle Dateien des aktuellen Verzeichnisses in die Shell gedruckt werden.
Ich habe also ein paar Tests ausgeführt, um das Problem einzugrenzen: In Bash mit und ohne die 3 Zeilen per echo. Statt bash in xfterm4, dem Standard unter XFCE/xUbuntu, mit gnome-terminal, xterm und uxterm - kein Unterschied.
Ob in einer bash-Shell, in psql oder der Scala-Shell, prinzipiell das gleiche Problem.
Auch unterschiedliche Editoren als Quelle habe ich getestet (gedit, scite, mousepad). Fail.
Einzig und alleine wenn ich dash aufrufe zeigt sich diese robust, und transferiert Tab zu Tab. Ich kenn' ja die dash nicht - was der Bauer ... die kennt keine History? Keinen bunten Directoryprompt? Keine Cmd-Cmpl.? Oder muss das alles nur konfiguriert werden? Nein - sagt nichts, ich wollte ja Tabs einfügen können, keinen shell-rant beginnen.
Also weiter im Text: Meine Hoffnung, dass ein aus der Shell gestartetes psql oder scala die Tabfreudigkeit der dash erben könnte war schneller ausprobiert und zerschlagen, als durchdacht. Jetzt, wo der Geist langsam hinterherkommt, erscheint es mir nur zu logisch: Sicher, die Programme sind alle eigenständig, und das wäre ja noch schöner, wenn psql mal so, mal so reagierte, je nach dem, ob per bash oder dash gestartet.
Und alle haben ihre eigene Kommandovervollständigung, und da die auf Tab triggert, kann ich allenfalls das eine haben - Tabs per cut'n'paste, oder das andere: Tabs zur Autovervollständigung. Wenn es sich in der Konfiguration ausschalten läßt.
Ich könnte jetzt entweder die Editoren auf Blanks-statt-Tabs umstellen, was natürlich nur theoretisch möglich ist. Oder ich paste jedes Snipplet in eine Datei, die ich temporär durch sed jage, picke da den Code wieder auf - das ist ja auch ziemlich idiotisch.
Kennt jmd. das Problem und hat andere Lösungsideen? Liegt meine Diagnostik vielleicht doch falsch?