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 cdfunktioniert 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_fileund another file(beachten Sie das Leerzeichen). Das passiert:
my_commandTABTAB
a_file
file
another
Die Präsentation ist nicht perfekt, aber die Idee ist, dass ich mit 3 Auswahlmöglichkeiten aufgefordert werde, another fileaufgeteilt in anotherund file. Die gewünschte Ausgabe wäre :
file_1 another file. Ich möchte auch, dass Leerzeichen automatisch maskiert werden:
my_command anoTAB
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.