Welche bash rc-Dateien werden auf nicht interaktiven / nicht angemeldeten Shells ausgeführt?

3

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
vol7ron
quelle
Einige Prozesse erstellen ihre eigene Umgebung, z cron und sudo.
fd0
Und ich weiß nicht, ob dies auf Ubuntu beschränkt ist, aber Ubuntu verfügt über systemweite Einstellungen für Umgebungsvariablen: help.ubuntu.com/community/… , die erwähnt sudo. Zum Beispiel würde ich erwarten cron haben $USER bereits festgelegt, aber stattdessen festgelegt $LOGNAME - Ich denke (kann mich nicht genau erinnern)
vol7ron

Antworten:

1

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.

echo "do whatever $PATH $BASH $PS1 $0"

wird

bash -lc 'echo "do whatever $PATH $BASH $PS1 $0"'

Laden Sie das Profil manuell

Tun Sie, was Anmeldungen tun, laden Sie das Profil manuell

source /etc/profile;echo "do whatever $PATH $BASH $PS1 $0"

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 Arbeit

THING_HOME="/opt/thing"
PATH="$PATH:/opt/thing" # this will NOT work

Fü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.

# If not running interactively, don't do anything
[ -z "$PS1" ] && return

Tu nichts davon

  • Berücksichtigen Sie Symlinks, wenn Sie versuchen, dem PATH etwas hinzuzufügen
  • Erwägen Sie, Ihre Programme / Skripte dazu zu bringen, ihre eigene Umgebung zu ändern
  • Systemd hat EnvironmentFile und Environment z.B. systemctl edit --full cron.service

Ich bin daran interessiert zu hören, ob jemand bessere Workarounds hat!

KCD
quelle