Umgebungsvariablen in macOs - wer setzt welche wo ?

K

kwi58

Mitglied
Thread Starter
Dabei seit
17.08.2023
Beiträge
3
Reaktionspunkte
1
Ich gebe es zu, ich bin ein neuer MacUser und benutze seit einiger Zeit einen Mini M2 Pro mit 13.4.1 (c).
Meine anfängliche Begeisterung über die einfache Handhabung und die problemlose Installation von Software
und Einbindung ins bestehende Homenetz ist aber inzwischen einer gewissen Ratlosigkeit gewichen.

Es betrifft die Umgebungsvariablen auf dem Rechner. In Google habe ich bisher keine befriedigende Erklärung gefunden,
da die Hinweise meist älteren Datums und deshalb nicht mehr korrekt sind.

Zumindest habe ich bisher /etc/profile als vermeintliche Quelle für die Ausprägung der CLASSPATH Variablen ausgemacht.
Doch als ich die Einträge korrigiert habe, musste ich feststellen, das sich die CLASSPATH Variable hartnäckig an die alte Einstellung hält,
selbst nach einem Neustart und obwohl die Datei den korrigierten Inhalt enthält.
Möglicherweise lachen sich die alten macOs Hasen jetzt scheckig, aber ich hoffe, das jemand eine erhellende Idee, was ich denn wohl falsch mache.

Ein ähnliches Verhalten habe ich mit cups festgestellt, nur das hier die Änderungen der Voreinstellungen für meinen Drucker direkt vergessen werden.
 
Wofür willst du die setzen?
Für Apps im Terminal oder GUI Apps?
Die /etc/profile wird auch nicht von jeder Shell ausgewertet.
Und für GUI Apps wird das über environment.plist gesetzt.
 
  • Gefällt mir
Reaktionen: dg2rbf
Ich denke das könnte Hilfreicher sein als jede extra geschriebene Erklärung:

https://support.apple.com/de-de/guide/terminal/apd382cc5fa-4f58-4449-b20a-41c53c006f8f/mac
https://www.codeflow.site/de/article/mac__how-to-set-environment-variables-on-mac-os-x
https://compien.com/where-set-environment-variables-mac-os-x

Gelacht wird dabei glaube ich nicht nicht, bei dem inzwischen so vernagelten System kommen einem eher Gedanken an Zahnschmerzen.
(Besonders wenn es nicht mehr so geht wie erwartet)

Willkommen im Forum
 
  • Gefällt mir
Reaktionen: ruerueka
Ich musste das auch für diverse Java Projekte machen. Damit es sowohl in der Shell als auch der GUI funktioniett, nimmt man am besten:

launchctl setenv VARNAME value

Kann man auch mit getenv wieder auslesen.


Damit gesetzte Werte werden in der Gui gefunden (IDE), in shells und auch von Webservern wie tomcat.
 
  • Gefällt mir
Reaktionen: win2mac und ruerueka
Ich nutze eine Version der Unix-Standardshell unter macOS als Loginshell. (Sonst liest sie auch die .rcrc nicht aus.) Bisher hat sich jedes Programm sklavisch daran gehalten, was ich in der .rcrc als Variable definiert habe.
 
Wofür willst du die setzen?
Zuerst mal sollte es in der zsh shell funktionieren .
Was mich verblüfft hat, ist, das eine falsche Zuweisung für die CLASSPATH Variable in der shell angezeigt wird, genauso falsch wie sie in /etc/profile eingetragen war. Als ich das änderte, ist die Datei zwar correct, aber die Variable bleibt falsch, auch nach einem restart.
Das hat bei mir die Frage aufgeworfen, wo werden die Variablen gesetzt. Die Verweise auf diversen Webseiten führten bei mir immer auf Dateien die leer oder gar nicht vorhanden waren.

Ich versuche eine komplette Laufzeitumgebung für ooRexx zu erstellen, um meine Apps von linux und windows auf macOs zu portieren.

launchctl setenv VARNAME value

Kann man auch mit getenv wieder auslesen.
Das erste gibt zwar keinen Fehler, aber die Variable wird mit env nicht angezeigt und getenv gibt nichts aus .

Es gibt ja genug Umgebungsvariablen in meiner Shell, ich finde nur nicht, wo sie gesetzt werden, und wenn ich dann mal eins finde, da wirkt eine Änderung nicht. Wenn ich mal etwas ergoogle, und ich versuche das auf meinem Rechner nachzuvollziehen, denke ich immer, ich habe wohl ein anderes BS als der Hinweisgeber.

.zshrc und .zprofile enthalten maximal 10% der variablen in meiner shell, und kein classpath.

T.b.c tomorrow
 
  • Gefällt mir
Reaktionen: warnochfrei
Das hat bei mir die Frage aufgeworfen, wo werden die Variablen gesetzt.
Da musst du mal den Abschnitt Invocation in man zsh lesen.
Da gibt es mehrere die in einer Reihenfolge ausgewertet werden.

Alternativ kannst ja auch ein
grep -R CLASSPATH /etc/*
machen.

Edit:
Und natürlich nicht die .irgendwas im $HOME vergessen.
 
Zuletzt bearbeitet:
Das erste gibt zwar keinen Fehler, aber die Variable wird mit env nicht angezeigt und getenv gibt nichts aus
Das ist aber der offizielle Weg. Setz mal ein sudo davor. Das muss gehen.

Und natürlich muss es dann
launchctl getenv VARNAME

heissen.
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: win2mac
Da diese Java-Variablen nicht zum System gehören, müssen sie mit irgendeiner (oder mehreren) Entwicklungsumgebung auf die Kiste gekommen sein. Da würde ich mal nachgucken, wo und wann die durch die IDE gesetzt bzw. überschrieben werden.

die Änderungen der Voreinstellungen für meinen Drucker direkt vergessen werden.
Hat nix mit Shell oder cups zu tun. Ist eine bekannte Macke im Mac GUI von 13.0 bis mind. 13.4.1
 
Ich nutze Ubuntu etc. via UTM und wüsste nicht warum ich in MacOS dafür rumfummeln sollte da die Ubuntu Server ARM Version wirklich rasant schnell auf einem M2 rennt.

Datentransfer läuft über Netzwerk und ist rasend schnell, Shell SSH geht vom Mac aus, mit UTM kann ich auch mehrere Ubuntu VM´s gleichzeitig sowie auch Windows11 laufen lassen usw.

So kann ich auch einfach mal eine VM duplizieren usw.
( Das 192.168.64.* ist UTM im Bridged Mode - Beim erstellen im letzten Schritt nicht vergessen Open VM Settings anzuhaken damit das Netzwerk direkt vor der Installation aktiviert werden kann, das ist sonst nicht aktiv bei Nutzung des Assistenten von UTM )

1692342606853.png


Beim TM Backup habe ich die VM´s ausgeschlossen und mache das via CCC da sonst die TM ratze fatz voll ist.....
 
Ich zieh jetzt in der .zshrc alles glatt, damit komme ich erst einmal klar.
UBUNTU ist für mich ein anderes Thema, das kann ich auch auf einem Raspberry laufen lassen.
Das mit dem Drucker ist echt ärgerlich.
Funktioniert mit 13.5.1 auch nicht.
Jetzt geht nicht mal mehr cupsctl WebInterface=Yes
 
Zuletzt bearbeitet:
Nachtrag von mir:

Mein Hinweis mit launchctl ist veraltet und funktioniert nicht mehr für normale User! Habe das gerade nachvollziehen müssen und dabei bemerkt.
Das ist ärgerlich, weil ein Eintrag in die .zshrc eben nicht bei allen Applikationen ankommt offenbar. Im Moment wüßte ich auch keinen besseren Weg als die .zshrc - ist aber sehr ärgerlich.
 
Ein Launcher Script mit
VAR=wert app_binary&
?
 
Ein Launcher Script mit
VAR=wert app_binary&
?
Ja das sind die Wege drum herum. Aber ein geregeltes Verfahren wie es z.B. Windows kennt macht hier Sinn, vor allem wenn solche Variablen App übergreifend gefragt sind.
 
Aber ein geregeltes Verfahren wie es z.B. Windows kennt macht hier Sinn, vor allem wenn solche Variablen App übergreifend gefragt sind.
Das Einzige was man an aktuellem findet, launchctl über eine launchagent plist aufzurufen.
 
  • Gefällt mir
Reaktionen: wegus
Aber auch über launchctl setenv verliert man nach Reboots manchmal gesetzte Werte. Das war mein Ausgangspunkt heute.

Schlimmer: reichte früher ein sudo launchctl setenv, musst Du heute erst die SIP deaktivierrn. Das ist ein Fehler im Design derzeit.
 
Zurück
Oben Unten