Ich habe in meinem System herumgespielt und bin darauf gestoßen
~$ echo $XDG_DATA_DIRS
/usr/share/ubuntustudio:/usr/share/xfce4:/usr/local/share:/usr/share:/var/lib/snapd/desktop:/usr/share
Als ich mich fragte, warum ich /usr/share
zweimal auf dem Weg bin, fand ich heraus, dass das folgende Snippet, in
/etc/alternatinves/x-session-manager
dem ein Link zu /usr/bin/startxfce4
steht, dafür verantwortlich ist:
#!/bin/sh
.
.
.
if test "x$XDG_DATA_DIRS" = "x"
then
if test "x/usr/share" = "x/usr/local/share" -o "x/usr/share" = "x/usr/share"; then
XDG_DATA_DIRS="/usr/local/share:/usr/share"
else
XDG_DATA_DIRS="/usr/share:/usr/local/share:/usr/share"
fi
else
XDG_DATA_DIRS="$XDG_DATA_DIRS:/usr/share"
fi
export XDG_DATA_DIRS
.
.
.
Wenn ich auf die Linie schaue
if test "x/usr/share" = "x/usr/local/share" -o "x/usr/share" = "x/usr/share"; then
Ich habe Schwierigkeiten, diese if-Aussage zu verstehen. Für mich sieht es aus wie ein Vergleich von Zeichenfolgen, bei denen die erste immer falsch und die zweite immer wahr ist.
In Kombination mit einer Logik wird or
der Test immer als wahr ausgewertet , sodass ich die Zeile auf kürzen
if true; then
oder sagen kann, dass ich überhaupt keine if-Anweisung benötige.
Wo ist mein Fehler? Oder ist es so geschrieben, um Anfänger wie mich zu verwirren?
quelle
Antworten:
Sie haben Recht, der Befehl
gibt immer true (0) zurück.
Es sieht so aus, als ob die betreffende Datei aus einer allgemeineren Version generiert wurde, aber die Art der Generierung war nicht optimal. Das Skript sollte entweder jedes Mal nach tatsächlichen Pfaden fragen oder nur den relevanten Zweig in der generierten Datei behalten.
Diese bestimmte Datei stammt jedoch aus einem Paket, das nicht auf Ihrem Computer generiert wird. Dies wird wahrscheinlich behoben / verbessert ... Sie können einen Fehler in Xfce Bugzilla einreichen (falls er dort noch nicht vorhanden ist) oder ihn selbst beheben. Sie können das Git-Repository für die Xfce4-Sitzung klonen und über ihre Mailingliste mit Xfce4-Entwicklern in Kontakt treten . Viel Glück bei der Verbesserung des Codes!
quelle
Das Skript
/usr/bin/startxfce4
scheint von einem Parser generiert zu werden. Wir können sehen, dass wir uns beim Betrachten des Quellcodes das entsprechende Snippet ansehen:Hier können wir die Bedeutung dieses if-Blocks sehen. Die Entwickler geben Paket-Maitainern die Möglichkeit, einen benutzerdefinierten Pfad hinzuzufügen,
XDG_DATA_DIRS
indem sie den gewünschten Pfad zum Skript analysieren und die Zeichenfolge@_datadir_@
durch diesen Pfad ersetzen .Dies funktioniert einwandfrei, wenn ein Pfad analysiert wird,
XDG_DATA_DIRS
der zum Zeitpunkt der Skriptausführung nicht enthalten ist. Der Pfad wird jedoch zweimal angezeigt, wenn ein Pfad analysiert wird, der zum Zeitpunkt der SkriptausführungXDG_DATA_DIRS
bereits vorhanden istXDG_DATA_DIRS
.Dies könnte vermieden werden, indem die Standard-XDG-Ordner (
/usr/share
,/usr/local/share
) nicht im Skript analysiert werden. Ich weiß jedoch nicht, ob dies möglich ist.Eine andere Lösung besteht darin, den Quellcode in zu ändern
Das würde nur die Verzeichnisse abdecken
/usr/share
und/usr/local/share
obwohl und man sollte in der Tat prüfen, ob es@_datadir_@
bereits existiertXDG_DATA_DIRS
oder nicht, aber ich weiß nicht, wer das tun soll, mein Wissen endet hier.In Ergänzung:
Gleiches gilt für diesen Teil des Skripts:
Wenn wir es analysieren
/etc/xdg
/ ersetzen, wird@_sysconfdir_@
es zu einem doppelten Pfad (/etc/xdg:/etc/xdg
inXDG_CONFIG_DIRS
.Schöne Grüße
Ich bin ein Endbenutzer, weit davon entfernt, Entwickler zu sein, daher kann ich das Problem nicht vollständig lösen. Dank Dessert und Melebius , die mich in die richtige Richtung getrieben haben, verstehe ich diese Wenn-Dann-Aussage jetzt zumindest.
Ich glaube, dass es nicht schadet, in diesen Umgebungsvariablen zweimal einen Pfad zu haben, daher werde ich keinen Fehler melden. Lassen Sie die Entwickler wertvollere Dinge tun.
Meine persönliche Lösung
Ich habe die Zeilen 67-89 in geändert
/usr/bin/startxfce4
zu
Natürlich habe ich zuerst die Originaldatei gesichert.
quelle