Verwenden Sie debconf, um Arrays mit beliebiger Länge von Benutzerwerten abzurufen

301
kael

Ich baue einige deb-Paketdateien, und ich bin auf eine Reihe von Instanzen gestoßen, in denen ich einen oder mehrere beliebige String-Werte (dh NICHT Multiselect) von einem Benutzer erhalten möchte . Derzeit sehe ich keine Möglichkeit, dies zu tun, und ich frage mich, ob es möglich ist.

Ein Beispiel wäre das Einrichten eines Pools von Administratoren für einen Computer. In diesem Fall könnte ich fragen:

$ Please add a user: $  $ username: someuser $ password: $ password set successfully $  $ User "someuser" successfully added. Would you like to add another? [y,n]: y $ $ username: notheruser $ password:  $ password set successfully $ $ Use "notheruser" successfully added..... 

Vermutlich würde dies ein Array für Benutzer und ein passendes Array für Kennwörter ergeben. (Anmerkung: etwas durchdachtes Beispiel, daher bin ich nicht an Diskussionen interessiert, ob dieser bestimmte Anwendungsfall eine gute Idee ist oder nicht.)

Gibt es eine Gemeindekonvention, um dies anzusprechen? Gibt es eine Confmodule-Lösung, von der ich nichts weiß?

-1
@someone danke für den anonymen Downvote ohne Kommentar .... kael vor 6 Jahren 0

1 Antwort auf die Frage

0
kael

Ok, es scheint keinen guten Weg zu geben. Ich übermittle diese Antwort (obwohl ich sie nicht akzeptiere) als eine mögliche Lösung, die ich wahrscheinlich kurzfristig einsetzen werde.

Sie können einfache Array-Antworten als durch Leerzeichen getrennte Listen zusammenstellen und sie dann wie folgt in Bash-Arrays parsen:

$ read ANS $ these are four values $ ANS=($ANS) $ for a in "$" do $ echo "Answer: $a" $ done $  $ # Outputs: $ # $ # Answer: these $ # Answer: are $ # Answer: four $ # Answer: values 

Wenn Sie etwas komplexeres als dies tun müssen, sind Sie offensichtlich vermasselt. Wenn Sie Werte mit Leerzeichen akzeptieren möchten, können Sie die Benutzer auffordern, ihre Werte anzugeben und evalden eingehenden Wert dann in ein Array umzuwandeln:

$ read ANS $ these are 'four or five' values $ eval "ANS=($ANS)" $ for a in "$" do $ echo "Answer: $a" $ done $  $ # Outputs: $ # $ # Answer: these $ # Answer: are $ # Answer: four or five $ # Answer: values 

Wieder nicht ideal, aber das habe ich bis jetzt.