Ein bisschen Kontext, diese Frage ist eine Fortsetzung dieser Frage: Bash Remote Autocompletion: Ändern Sie das 'Start'-Verzeichnis
Wie auch immer, ich schreibe mein benutzerdefiniertes Bash-Skript für die automatische Vervollständigung: Ich möchte, dass die automatische Vervollständigung genauso cd
funktioniert wie sie, außer dass ich die Namen aus einem bestimmten Verzeichnis abrufen möchte, nicht unbedingt aus dem aktuellen. Es funktioniert hervorragend, außer wenn Dateinamen Leerzeichen enthalten.
Ein kurzes Beispiel. Angenommen, das Verzeichnis, aus dem ich die Namen erhalte, enthält zwei Dateien: a_file
und another file
(beachten Sie das Leerzeichen). Das passiert:
my_command
TABTAB
a_file
file
another
Die Präsentation ist nicht perfekt, aber die Idee ist, dass ich mit 3 Auswahlmöglichkeiten aufgefordert werde, another file
aufgeteilt in another
und file
. Die gewünschte Ausgabe wäre :
file_1
another file
. Ich möchte auch, dass Leerzeichen automatisch maskiert werden:
my_command ano
TAB
my_command another\ file
So sieht mein Skript aus:
#! / bin / bash _get_file_list () { dir = "/ some / path /" cd $ dir find * -maxdepth 0 }} _GetOptMyCommand () { lokale cur COMPREPLY = () cur = $ {COMP_WORDS [COMP_CWORD]} Fall "$ cur" in - *) COMPREPLY = ($ (compgen -W "-h -l --help --list -" - "$ cur")) ;; *) COMPREPLY = ($ (compgen -W "$ (_ get_file_list)" - "$ cur")) ;; esac 0 zurückgeben }} complete -F _GetOptMyCommand my_command
Wie gehe ich mit Leerzeichen in Dateinamen um und mache mein Autocompletion-Skript so cd
?
local IFS=$'\n'
scheint das zu sein, wonach Sie suchen. Das hat bei mir funktioniert.