Syntax vom Befehl compgen in script?

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
ropri8
Beiträge: 85
Registriert: 22.02.2008 08:37:56

Syntax vom Befehl compgen in script?

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:

Code: Alles auswählen

ran@lime2:~$ compgen -W "frueh mittag abend" fr
frueh
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: 2006
Registriert: 10.12.2008 10:51:41

Re: Syntax vom Befehl compgen in script?

Beitrag von tobo » 23.04.2024 16:33:28

ropri8 hat geschrieben: ↑ zum Beitrag ↑
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

Re: Syntax vom Befehl compgen in script?

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: 2006
Registriert: 10.12.2008 10:51:41

Re: Syntax vom Befehl compgen in script?

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

Re: Syntax vom Befehl compgen in script?

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

Antworten