staging.inyokaproject.org

Bash: Dateinamen- und Befehlsergänzung; Fenster schließen mit/ohne Nachfrage

Status: Ungelöst | Ubuntu-Version: Xubuntu 12.04 (Precise Pangolin)
Antworten |

Feuerrabe

Anmeldungsdatum:
16. März 2011

Beiträge: 109

Hallo,

ich habe drei Fragen zur bash und hoffe, daß ich keine Prügel bekomme, falls die Antwort schon irgendwo steht:

1. Wenn ich zwei Dateien mit den Namen "Datei.html" und z. B. "Datei.odt" im Verzeichnis habe und in der bash eingebe:

1
firefox Dat<Tab-Taste>

, dann weiß Firefox sofort, daß die HTML-Datei gemeint ist und ergänzt also nicht nur bis zum Punkt (Datei.), sondern (hier) den ganzen Dateinamen, also Datei.html.
Wie kann ich so ein Verhalten auch für selbst geschriebene Befehle (= Bash-Skripte und C-Programme) erreichen, daß also die bash weiß, daß mein Programm als Argument z. B. Dateien mit der Endung .html, .txt oder .php erwartet?

2. Auf meinem Rechner mit Kubuntu/Xubuntu 12.04 funktioniert die Befehlsergänzung auch in folgender Situation:

1
for Datei in *.txt; do [mark]bearbei[/mark]<Tab-Taste> $Datei; done

Wenn der Befehlsname also "bearbeiten" lauten würde, könnte ich ihn mit der Tab-Taste ergänzen, falls es keinen anderen gibt, der genauso anfängt.
Auf einem anderen Rechner mit Kubuntu/Xubuntu 14.04 funktionert genau dasselbe jedoch nicht, d. h. ich muß den Befehlsnamen von Hand zu Ende schreiben.
Woran liegt das, und wie kann ich das ändern?

3. Die dritte Frage betrifft ebenfalls einen Unterschied zwischen diesen beiden Rechnern: Auf beiden kann ich Befehlsfenster mit einem oder mehreren Tabs mit Strg + Umschalt + Q schließen, einen einzelnen Tab (oder wenn nur einer offen ist) auch mit Strg + Umschalt + W. Aber auf dem mit 12.04 werde ich vorher gefragt, ob ich das will; außerdem gibt es noch ein freundliches Geräusch. Beim anderen gibt es kein Geräusch, und vor allem wird das Fenster ohne Nachfrage geschlossen (Fehlerquelle).
Wo kann ich einstellen, ob ich gefragt werden will? Ich habe die Stelle trotz intensiver Suche nicht gefunden. Kann man das nur über die Menüs des Bash-Fensters einstellen, oder gibt es auch Konfigurationsdateien, in denen diese und andere Einstellungen editiert werden können?

Vielen Dank für hilfreiche Antworten!

Feuerrabe

P. S.: Seltsamerweise funktionieren in diesem Unterforum weder die automatisch numerierten Listen (habe ich heute im Unterforum Multimedia schon verwendet) noch die Hervorhebung im Codeblock mit [mark ] ... [/mark ].

misterunknown Team-Icon

Ehemalige
Avatar von misterunknown

Anmeldungsdatum:
28. Oktober 2009

Beiträge: 4403

Feuerrabe schrieb:

1. Wie kann ich so ein Verhalten auch für selbst geschriebene Befehle (= Bash-Skripte und C-Programme) erreichen, daß also die bash weiß, daß mein Programm als Argument z. B. Dateien mit der Endung .html, .txt oder .php erwartet?

Das Stichwort hierzu ist Bash-Completition. Im Internet findest du da viele Informationen, beispielsweise diesen deutschen Artikel oder das hier oder das.

2. Auf einem anderen Rechner mit Kubuntu/Xubuntu 14.04 funktionert genau dasselbe jedoch nicht, d. h. ich muß den Befehlsnamen von Hand zu Ende schreiben. Woran liegt das, und wie kann ich das ändern?

Vermutlich ist auf dem System das Paket bash-completition nicht vorhanden. Siehe auch hier.

3. Wo kann ich einstellen, ob ich gefragt werden will? Ich habe die Stelle trotz intensiver Suche nicht gefunden.

Das ist keine Funktion der Bash, sondern des Terminal Emulators. Ein Beispiel wäre gnome-terminal. Dort kannst du das Verhalten normalerweise in den Einstellungen anpassen.

P. S.: Seltsamerweise funktionieren in diesem Unterforum weder die automatisch numerierten Listen (habe ich heute im Unterforum Multimedia schon verwendet) noch die Hervorhebung im Codeblock mit [mark ] ... [/mark ].

Eine Korrekte Nummerierung bekommt man, wenn man als Nummer immer die 1 verwendet und am Anfang der Zeile ein Whitespace einfügt:

 1. Erster Punkt
 1. Zweiter Punkt
 1. Dritter Punkt
^
|
Leerzeichen

Markierungen funktionieren nur im Fließtext, oder in Rohtext-Blöcken. Hat man einen Codeblock mit Syntax-Highlighting, funktioniert das nicht.

Feuerrabe

(Themenstarter)

Anmeldungsdatum:
16. März 2011

Beiträge: 109

misterunknown schrieb:

Feuerrabe schrieb:

1. Wie kann ich so ein Verhalten auch für selbst geschriebene Befehle (= Bash-Skripte und C-Programme) erreichen, daß also die bash weiß, daß mein Programm als Argument z. B. Dateien mit der Endung .html, .txt oder .php erwartet?

Das Stichwort hierzu ist Bash-Completition. Im Internet findest du da viele Informationen, beispielsweise diesen deutschen Artikel oder das hier oder das.

Den einen Artikel habe ich überflogen (die anderen kurz angekuckt) und noch nicht alles verstanden. (Muß mir mal in einer ruhigen Stunde die Zeit nehmen, das genauer zu lesen.) Wenn ich die Beispiele richtig interpretiere, kann man mit dem Befehl complete eigenen Kommandos sagen, auf welche Dateinamen sie hören sollen, also genau das, was ich wollte. Freilich mit Einschränkungen, wenn man verschiedene Endungen bedienen will.

Muß man solche Skripte dann bei jedem Bash-Aufruf oder gar bei jedem Aufruf eigener Befehle laufen lassen, oder werden mit einem einmaligen Aufruf (pro Befehl) irgendwelche Bash-Variablen verändert, die sich das System dann merkt? Wenn ja, könnte man dann nicht direkt die Bash-Variablen in .bashrc oder .profile entsprechend festlegen?

2. Auf einem anderen Rechner mit Kubuntu/Xubuntu 14.04 funktionert genau dasselbe jedoch nicht, d. h. ich muß den Befehlsnamen von Hand zu Ende schreiben. Woran liegt das, und wie kann ich das ändern?

Vermutlich ist auf dem System das Paket bash-completition nicht vorhanden. Siehe auch hier.

Da die Rechner an unterschiedlichen Orten stehen, kann ich es immer nur für einen überprüfen. Im Moment bin ich an dem, wo es funktioniert. Ich kann mir aber kaum vorstellen, daß auf dem anderen bash-completion nicht installiert ist, denn im Normalfall werden ja auch dort Befehlsnamen ergänzt. Nur eben nicht in dem Kontext

1
for x in y; do Befehl ...

oder

1
for ((i=$Anfang; i<=$Ende; i++)); do Befehl ...

>> 3. Wo kann ich einstellen, ob ich gefragt werden will? Ich habe die Stelle trotz intensiver Suche nicht gefunden.

Das ist keine Funktion der Bash, sondern des Terminal Emulators. Ein Beispiel wäre gnome-terminal. Dort kannst du das Verhalten normalerweise in den Einstellungen anpassen.

Auf dem Rechner mit Kubuntu 14.04 ist KDE installiert und in Gebrauch. (Auf dem anderen mit 12.04 zwar auch, aber hier benutze ich XFCE.) Könnte es daran liegen? Eigentlich ist es ja meist umgekehrt: Daß man bei KDE wesentlich mehr Einstellmöglichkeiten hat als bei XFCE. Die Menüs sehen bei beiden Oberflächen gleich oder fast gleich aus. Die Tastenkombinationen habe ich beispielsweise aus den Ausklapp-Menüs am oberen Fensterrand. Sonst wüßte ich das gar nicht. Und sie sind für beide Terminal-Emulatoren gleich.

Beim KDE-Rechner habe ich in den Einstellungen für den Terminal-Emulator schon viel gesucht, aber wie gesagt ohne Erfolg. So konnte ich (bei KDE und XFCE) die Farben des Befehlsfensters, die Schriftart und -größe, den Befehlspuffer usw. anpassen, aber eben nicht bestimmen, ob die Tastenkombination Strg + Umschalt + Q die Fenster mit oder ohne Nachfrage schließt.

Weißt Du, wo man das im KDE-Terminal-Emulator einstellen kann?

Bei meinem XFCE-Rechner erscheint beim Betätigen der Tastenkombination die Nachfrage, und man kann ankreuzen, daß man in Zukunft nicht mehr gefragt werden will. Vielleicht hat auf dem anderen Rechner irgendjemand mal dieses Kästchen angeklickt. Dann wird man nicht mehr gefragt und kann deswegen das Häkchen nicht mehr wegnehmen. Aber irgendwo muß man das doch rückgängig machen können. Am liebsten wäre mir irgendeine Konfigurationsdatei.

P. S.: Seltsamerweise funktionieren in diesem Unterforum weder die automatisch numerierten Listen (habe ich heute im Unterforum Multimedia schon verwendet) noch die Hervorhebung im Codeblock mit [mark ] ... [/mark ].

Eine Korrekte Nummerierung bekommt man, wenn man als Nummer immer die 1 verwendet und am Anfang der Zeile ein Whitespace einfügt:

 1. Erster Punkt
 1. Zweiter Punkt
 1. Dritter Punkt
^
|
Leerzeichen

Das weiß ich und funktioniert normalerweise problemlos (s. mein heutiger Beitrag in einem anderen Unterforum). Aber hier führte es zu grausigen Ergebnissen; daher mußte ich von Hand numerieren, was satztechnisch nicht so toll aussieht. Vielleicht lag es daran, daß in den Listenpunkten Codeblöcke enthalten sind.

Markierungen funktionieren nur im Fließtext, oder in Rohtext-Blöcken. Hat man einen Codeblock mit Syntax-Highlighting, funktioniert das nicht.

Das steht im Syntaxberater aber anders.

Gruß

Feuerrabe

Bearbeitet von rklm:

Link repariert

misterunknown Team-Icon

Ehemalige
Avatar von misterunknown

Anmeldungsdatum:
28. Oktober 2009

Beiträge: 4403

Feuerrabe schrieb:

Muß man solche Skripte dann bei jedem Bash-Aufruf oder gar bei jedem Aufruf eigener Befehle laufen lassen, oder werden mit einem einmaligen Aufruf (pro Befehl) irgendwelche Bash-Variablen verändert, die sich das System dann merkt?

Die Bash merkt sich Funktionen für die aktuelle Sitzung. Du defininierst einfach eine Completition-Funktion, registrierst sie (complete-Befehl) und dann steht sie zur Verfügung. Du kannst solche Sachen natürlich in deine .bashrc schreiben, allerdings gehören sie dort nicht hin. Adäquat wäre IMHO /etc/bash_completition (sofern das Paket installiert ist).

Auf dem Rechner mit Kubuntu 14.04 ist KDE installiert und in Gebrauch. (Auf dem anderen mit 12.04 zwar auch, aber hier benutze ich XFCE.) Könnte es daran liegen?

Ja, da du damit vermutlich verschiedene Terminal-Emulatoren nutzt. Bei XFCE ist es das xfce4-terminal, bei KDE gibt es die konsole.

Weißt Du, wo man das im KDE-Terminal-Emulator einstellen kann?

Meines Erachtens müsste die Einstellung mit in den Profilen zu finden sein.

Bei meinem XFCE-Rechner erscheint beim Betätigen der Tastenkombination die Nachfrage, und man kann ankreuzen, daß man in Zukunft nicht mehr gefragt werden will. Vielleicht hat auf dem anderen Rechner irgendjemand mal dieses Kästchen angeklickt. Dann wird man nicht mehr gefragt und kann deswegen das Häkchen nicht mehr wegnehmen. Aber irgendwo muß man das doch rückgängig machen können. Am liebsten wäre mir irgendeine Konfigurationsdatei.

Da bin ich überfragt, ich nutze KDE nicht.

P. S.: Das weiß ich und funktioniert normalerweise problemlos (s. mein heutiger Beitrag in einem anderen Unterforum). Aber hier führte es zu grausigen Ergebnissen; daher mußte ich von Hand numerieren, was satztechnisch nicht so toll aussieht. Vielleicht lag es daran, daß in den Listenpunkten Codeblöcke enthalten sind.

Ja, das kann sein.

Das steht im Syntaxberater aber anders.

Ich habe den Eintrag mal etwas konkretisiert.

ChickenLipsRfun2eat Team-Icon

Anmeldungsdatum:
6. Dezember 2009

Beiträge: 12067

Hallo!

Zu Konsole: Einstellungen - Konsole einrichten - Allgemein - Benachrichtigungen - "Diese Nachfrage nicht mehr anzeigen"-Meldungen aktivieren.

Feuerrabe

(Themenstarter)

Anmeldungsdatum:
16. März 2011

Beiträge: 109

misterunknown schrieb:

Die Bash merkt sich Funktionen für die aktuelle Sitzung. Du defininierst einfach eine Completition-Funktion, registrierst sie (complete-Befehl) und dann steht sie zur Verfügung. Du kannst solche Sachen natürlich in deine .bashrc schreiben, allerdings gehören sie dort nicht hin. Adäquat wäre IMHO /etc/bash_completition (sofern das Paket installiert ist).

Bei mir ist die Datei vorhanden (1700 Zeilen). Da steht z. B.:

complete -f -X '*.@(o|so|so.!(conf)|a|[rs]pm|gif|jp?(e)g|mp3|mp?(e)g|avi|asf|ogg|class)' vi vim gvim rvim view rview rgvim rgview gview emacs xemacs sxemacs kate kwrite

complete -f -X '!*.@(okular|@(?(e|x)ps|?(E|X)PS|pdf|PDF|dvi|DVI|cb[rz]|CB[RZ]|djv?(u)|DJV?(U)|dvi|DVI|gif|jp?(e)g|miff|tif?(f)|pn[gm]|p[bgp]m|bmp|xpm|ico|xwd|tga|pcx|GIF|JP?(E)G|MIFF|TIF?(F)|PN[GM]|P[BGP]M|BMP|XPM|ICO|XWD|TGA|PCX|epub|EPUB|odt|ODT|fb?(2)|FB?(2)|mobi|MOBI|g3|G3|chm|CHM|fdf|FDF)?(.?(gz|GZ|bz2|BZ2)))' okular

complete -f -X '!*.@(?([xX]|[sS])[hH][tT][mM]?([lL]))' netscape mozilla lynx opera galeon dillo elinks amaya firefox mozilla-firefox iceweasel google-chrome chromium-browser epiphany

Das scheint genau die Konfigurationsdatei zu sein, die ich gesucht habe. Hier könnte ich also zu selbstgeschriebenen Programmen passende Dateiendungen definieren. Die Syntax sieht so ähnlich aus wie reguläre Ausdrücke, aber das ? steht z. B. vor dem Ausdruck, auf den es sich bezieht.

Meines Erachtens müsste die Einstellung mit in den Profilen zu finden sein.

Da hatte ich gesucht. → Antwort auf nachfolgenden Beitrag

Einstweilen vielen Dank für die Hilfe! Das hat mich schon sehr weitergebracht.

Feuerrabe

(Themenstarter)

Anmeldungsdatum:
16. März 2011

Beiträge: 109

ChickenLipsRfun2eat schrieb:

Zu Konsole: Einstellungen - Konsole einrichten - Allgemein - Benachrichtigungen - "Diese Nachfrage nicht mehr anzeigen"-Meldungen aktivieren.

Das klingt gut. Ich werde es auf dem KDE-Rechner ausprobieren. Hier bei XFCE gibt es zwar auch den Reiter "Allgemein", aber den Recht nicht mehr. Mal sehen, wie das beim KDE-Terminal-Emulator ist.

Danke an alle!

misterunknown Team-Icon

Ehemalige
Avatar von misterunknown

Anmeldungsdatum:
28. Oktober 2009

Beiträge: 4403

Feuerrabe schrieb:

Das scheint genau die Konfigurationsdatei zu sein, die ich gesucht habe. Hier könnte ich also zu selbstgeschriebenen Programmen passende Dateiendungen definieren.

Eigene Definitionen kannst du als separate Dateien unter /etc/bash_completion.d/ ablegen.

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13242

Feuerrabe schrieb:

Das weiß ich und funktioniert normalerweise problemlos (s. mein heutiger Beitrag in einem anderen Unterforum). Aber hier führte es zu grausigen Ergebnissen; daher mußte ich von Hand numerieren, was satztechnisch nicht so toll aussieht. Vielleicht lag es daran, daß in den Listenpunkten Codeblöcke enthalten sind.

Nur zur Klarstellung: dieses Unterforum hat keine Besonderheiten - die Syntax bei Postings funktioniert exakt wie in allen anderen.

Antworten |