Verwenden Sie Debconf, um Arrays beliebiger Länge von Benutzerwerten zu erhalten

Verwenden Sie Debconf, um Arrays beliebiger Länge von Benutzerwerten zu erhalten

Ich erstelle einige Deb-Paketdateien und bin auf eine Reihe von Fällen gestoßen, in denen ich gerne eine hätteoder mehrbeliebige Zeichenfolgenwerte (also KEINE Mehrfachauswahl) von einem Benutzer. Derzeit sehe ich keine Möglichkeit, dies zu tun, und frage mich, ob es möglich ist.

Ein Beispiel wäre das Einrichten eines Pools von Administratorbenutzern für eine Maschine. 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.....

Dies würde vermutlich ein Array für Benutzer und ein passendes Array für Passwörter ergeben. (Hinweis: etwas konstruiertes Beispiel, daher bin ich nicht an Diskussionen darüber interessiert, ob dieser spezielle Anwendungsfall eine gute Idee ist oder nicht.)

Gibt es eine Community-Konvention, um dieses Problem zu lösen? Gibt es eine Confmodule-Lösung, die ich nicht kenne?

Antwort1

Ok, es scheint keinen guten Weg zu geben, dies zu tun. Ich übermittle diese Antwort (obwohl ich sie nicht akzeptiere) alsmöglichLösung, die ich wahrscheinlich kurzfristig anwenden werde.

Sie können einfache Array-Antworten als durch Leerzeichen getrennte Listen sammeln und diese dann einfach wie folgt in Bash-Arrays analysieren:

$ read ANS
$ these are four values
$ ANS=($ANS)
$ for a in "${ANS[@]}" 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 natürlich aufgeschmissen. Wenn Sie Werte mit Leerzeichen akzeptieren möchten, können Sie die Benutzer auffordern, ihre Werte in Anführungszeichen zu setzen und dann evalden eingehenden Wert zu verwenden, um ihn in ein Array umzuwandeln:

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

Auch hier gilt: nicht ideal, aber das ist, was ich bisher habe.

verwandte Informationen