Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
-
ropri8
- Beiträge: 85
- Registriert: 22.02.2008 08:37:56
Beitrag
von ropri8 » 23.04.2024 16:16:32
Hallo!
Wenn ich den Befehl compgen mit der Option -W direkt verwende, funktioniert z. B. diese Syntax:
Wenn ich den Befehl nun in einem script (in einem anderen Zusammenhang, aber auch mit der Option -W) verwende funktioniert er nur mit "--" (als 2 Bindestrichen) zwischen Wortliste und Wort; habe das nach längerer Suche in Beispielen im Netz gefunden. Was bedeutet nun "--" ? Ist damit etwa das drücken der Tab-Taste gemeint? In der Beschreibung von compgen in der bash habe ich auf Anhieb mal nichts dazu gefunden. In meinem Script sieht die betreffende Zeile dann so aus:
Code: Alles auswählen
COMPREPLY=($(compgen -W "-tid -project_name_new -activity_name_new -description_new " -- ${COMP_WORDS[$COMP_CWORD]}))
Gruß, Roman
-
tobo
- Beiträge: 2253
- Registriert: 10.12.2008 10:51:41
Beitrag
von tobo » 23.04.2024 16:33:28
ropri8 hat geschrieben: 23.04.2024 16:16:32
Was bedeutet nun "--" ?
Ein Ende der Optionen - nach -- folgen Argumente und Dateinamen.
man bash hat geschrieben:
A -- signals the end of options and disables further option processing. Any arguments after the -- are treated as filenames and arguments. An argument of - is equivalent to --.
-
ropri8
- Beiträge: 85
- Registriert: 22.02.2008 08:37:56
Beitrag
von ropri8 » 23.04.2024 18:27:09
OK, da lag ich falsch mit der TAB-Taste.
Und warum brauch ich das hier? Außerhalb vom Script funktioniert's ja auch ohne "--"; Und im Script ist ja auch alles was zur Option -W gehört innerhalb von Anführungszeichen gestellt; dennoch geht's hier nicht ohne "--"
-
tobo
- Beiträge: 2253
- Registriert: 10.12.2008 10:51:41
Beitrag
von tobo » 23.04.2024 19:17:48
Es macht Sinn, wenn man Beispiele einstellt, die man nachvollziehen kann. Dein Beispiel z.B. funktioniert problemlos in einem Skript:
Code: Alles auswählen
$ cat t.sh
compgen -W "frueh mittag abend" fr
$ bash t.sh
frueh
$
Das Problem dürfte sein, dass die Array-Variable einen führenden - enthält. Damit wird suggeriert, dass in der Aufrufzeile von compgen noch eine Option folgt. Das -- dazwischen sagt: Ende der Optionen, jetzt folgen Argumente:
Code: Alles auswählen
$ cat t.sh
arr=(1 -2 3)
compgen -W "1 -2 3" ${arr[$1]}
compgen -W "1 -2 3" -- ${arr[$1]}
$ bash t.sh 0
1
1
$ bash t.sh 1
t.sh: line 2: compgen: -2: invalid option
compgen: usage: compgen [-abcdefgjksuv] [-o option] [-A action] [-G globpat] [-W wordlist] [-F function] [-C command] [-X filterpat] [-P prefix] [-S suffix] [word]
-2
$
EDIT: Beispiel erweitert
-
ropri8
- Beiträge: 85
- Registriert: 22.02.2008 08:37:56
Beitrag
von ropri8 » 24.04.2024 06:29:41
Ja tatsächlich. Das "-" in den Array-Inhalten dürft das Problem machen. Hab' den Effekt nun auch außerhalb vom Script nachvollziehen können. Werde also "--" als Trennung verwenden.
DANKE!
Gruß, Roman