Univention Bugzilla – Bug 27465
ucr get sollte im return value anzeigen, ob eine Variable existiert
Last modified: 2019-01-03 07:21:32 CET
Ich habe aus dem ucr eine Variable ausgelesen, die gar nicht gesetzt war. ucr unset dns/fakeroot ucr get dns/fakeroot ; echo $? 0 Hier wird der Leerstring auf stdout geliefert und ein return value von 0. Besser wäre es, einen anderen return value zu liefern, damit dieser Fall leichter auswertbar wird. Streng genommen kann man ungesetzte Variable durchaus auch jetzt schon erkennen, nämlich so: ucr search dns/fakeroot dns/fakeroot: <empty> Aber das ist zu umständlich und niemand macht das so. Deshalb wäre die Lösung mit dem return value wohl die praktisch sinnvollste.
Workaround mit einer Kombination aus :? und ? Variablen-Quantoren in der Shell: #!/bin/bash eval "$(ucr shell)" if (: ${dns_fakeroot:?unset_or_empty};) 2>/dev/null; then echo ok elif (: ${dns_fakeroot?unset};) 2>/dev/null; then echo empty else echo unset fi
(In reply to comment #1) > Workaround mit einer Kombination aus :? und ? Variablen-Quantoren in der Shell: Das folgende Skript enthält einen subtilen Bug. > #!/bin/bash unset dns_fakeroot > eval "$(ucr shell)" > > if (: ${dns_fakeroot:?unset_or_empty};) 2>/dev/null; then > echo ok > elif (: ${dns_fakeroot?unset};) 2>/dev/null; then > echo empty > else > echo unset > fi ansonsten liefert "dns_fakeroot=foo ./script" das falsche Ergebnis: In UCR ist die Variable zwar nicht gesetzt, aber im Shell-Environment ist sie bereits durch den Vater-Prozeß gesetzt. Wieder ein Beweis dafür, das "jedes gute Shell-Skript mit #!/usr/bin/perl" anfängt. (Zitat von einem (Ex-)Kollegen)
Schöner wäre in der Tat die von Jürgen vorgeschlagene Anpassung des Returncodes. ..Freuden der Abbildung ternärer Logik ("Wert","",None) auf ein vorherrschend binäres Denken..
This issue has been filled against UCS 4.1. The maintenance with bug and security fixes for UCS 4.1 has ended on 5st of April 2018. Customers still on UCS 4.1 are encouraged to update to UCS 4.3. Please contact your partner or Univention for any questions. If this issue still occurs in newer UCS versions, please use "Clone this bug" or simply reopen the issue. In this case please provide detailed information on how this issue is affecting you.