Warum funktioniert die Pfadvervollständigung in Bash nicht immer?


7

Bei verschiedenen Bash-Umgebungen (verschiedenen Installationen) habe ich unterschiedliche Verhaltensweisen in Bezug TABauf die Pfadvervollständigung, wenn ich danach auf die Befehlszeile drücke. Wo wird das gehandhabt?

Ein konkretes Beispiel:

Ich laufe cmakemit einem -DArgument:

cmake -DCMAKE_TOOLCHAIN_FILE=~/x-too<TAB>

es macht nichts. Während (beachten Sie den Abstand zwischen =und~

cmake -DCMAKE_TOOLCHAIN_FILE= ~/x-too<TAB> 

vervollständigt zu

cmake -DCMAKE_TOOLCHAIN_FILE= ~/x-tools

Auf anderen Systemen funktioniert es sogar ohne Leerzeichen zwischen = und ~.

Wo finde ich die zugehörigen Konfigurationsdateien und Werte?

Antworten:


4

Linux-Autovervollständigungen funktionieren mit complete.

 ]➬complete -p  cmake
 complete -F _cmake cmake

Also ist _cmake verantwortlich.

]➬type _cmake > cmake.sh

Und jetzt sehen / debuggen Sie es einfach. Sie ändern beispielsweise _cmake_mine und rufen auf, um es zu testen:

. cmake.sh
complete -F _cmake_mine cmake

So erhalten Sie Hilfe für einen integrierten Bash-Befehl:

 help complete
 help [[
 help for

Ich wusste nie, dass helpdas manfür Bash gebaut wurde!
wisbucky

3

Du musst mit anfangen /etc/profile. Sehen Sie, welche anderen Dateien davon stammen ( .wahrscheinlich mit dem Befehl).

Zum Beispiel auf meinem Ubuntu-System,

  • /etc/profile Quellen alle * .sh-Datei in /etc/profile.d/
  • /etc/profile.d/bash_completion.sh Quellen /usr/share/bash-completion/bash_completion
  • diese Datei:
    • Richtet eine Completion Loader-Funktion ein, die angezeigt wird /usr/share/bash-completion/completions/
    • und Quellen ~/.bash_completion

Sie möchten diesen Pfad auf Ihren verschiedenen Systemen verfolgen. Vielleicht gibt es keine cmakeDatei in / usr / share / bash-vervollständigung / vervollständigungen / auf einer von ihnen.


Danke, das hat mich verrückt gemacht. Aus irgendeinem Grund ist dies in Ubuntu 16.04 nicht immer eingerichtet.
Andres F.
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.