Mein Verständnis
Es sind keine RC-Dateien für nicht interaktive / nicht angemeldete Shells vorhanden. zum Beispiel die, die von laufen cron
(Ich weiß das nicht mit Sicherheit und würde mich auf das Fachwissen der Community stützen.)nicht interaktiv Muscheln erfordern die
BASH_ENV
zu setzende Umgebungsvariable, die es ermöglicht, sie auf eine bestimmte RC-Datei zu setzen (z. B.BASH_ENV=$HOME/.bash_profile
)
Die Hoffnung
Ich bin mir nicht sicher über die Fülle der verfügbaren RC-Dateien, bin also gespannt, ob es welche gibt, mit denen ich nicht vertraut bin. Ich hoffe, eine RC-Datei zu finden, die die folgenden Bedingungen erfüllt:
- Wird unabhängig vom Interaktions- / Anmeldemodus aufgerufen, sodass globale Shell-Umgebungsvariablen an einer Stelle festgelegt werden können
- führt eher wie csh / tcsh
cron
undsudo
.sudo
. Zum Beispiel würde ich erwartencron
haben$USER
bereits festgelegt, aber stattdessen festgelegt$LOGNAME
- Ich denke (kann mich nicht genau erinnern)Antworten:
Die Antwort auf Ihre spezielle Frage lautet oft nur so
/etc/bash.bashrc
(oder/etc/bashrc
) geladen ist.Es scheint ein paar Möglichkeiten zu geben, dies zu beheben, die meisten sind leider Umgehungen. In keiner bestimmten Reihenfolge der Präferenz:
Fake ein Login
Logan rennt davon
/etc/profile
und oft können Sie Ihre benutzerdefinierten Skripte in platzieren/etc/profile.d/*.sh
Wickeln Sie es in einem Bash-Login
Manchmal ist es am einfachsten, eine Anmeldung auszulösen, d. H.
wird
Laden Sie das Profil manuell
Tun Sie, was Anmeldungen tun, laden Sie das Profil manuell
Bearbeiten Sie globale Umgebungsvariablen
Für einfache Variablen können Sie hinzufügen
/etc/environment
sehen Ubuntu Systemweite_Umgebungsvariablen aber variable Expansion tut es nicht ArbeitFür PATH können Sie z.
sudo sed -i 's#PATH=\"[^\"]*#&:/opt/thing#' /etc/environment
Bearbeiten Sie alle Bash-Shells
Sie können hinzufügen
/etc/bash.bashrc
(oder/etc/bashrc
) jedoch Dies wird normalerweise vorzeitig beendet, wenn es nicht interaktiv ist.Tu nichts davon
EnvironmentFile
undEnvironment
z.B.systemctl edit --full cron.service
Ich bin daran interessiert zu hören, ob jemand bessere Workarounds hat!
quelle