Gibt es eine Bash-Datei, die immer im interaktiven Modus bezogen wird, unabhängig davon, ob sie angemeldet oder nicht angemeldet ist?

10

Soweit ich weiß, können sich die interaktiven Shells anmelden oder nicht anmelden, und die Startdateien für sie sind unterschiedlich.

  • Wenn interactive + Login - Shell → /etc/profiledann die erste lesbar von ~/.bash_profile, ~/.bash_loginund~/.profile
  • Wenn interaktiv + Nicht-Login-Shell → /etc/bash.bashrcdann~/.bashrc

Ich möchte jedes Mal, wenn ich eine interaktive Shell verwende, einige Variablen festlegen, unabhängig davon, ob es sich um eine Anmeldeshell handelt oder nicht.

S182
quelle
1
@strugee Nein, bei dieser Frage geht es nicht um Umgebungsvariablen.
Gilles 'SO - hör auf böse zu sein'
@ Gilles ja, aber deine Antwort gilt genauso gut.
strugee
1
@strugee Das liegt daran, dass ich über die unmittelbare Frage hinaus ein peripheres Thema angesprochen habe. Ein Absatz in einer Antwort ergibt kein Duplikat. Fragen sind nur Duplikate, wenn sie im Wesentlichen identische Antworten haben, nicht wenn eine Antwort genügend Material enthält, um die zweite zu beantworten.
Gilles 'SO - hör auf böse zu sein'

Antworten:

10

Nein, gibt es nicht. Ja, dies ist ein Konstruktionsfehler.

Verwenden Sie den folgenden Inhalt in ~/.bash_profile:

if [ -e ~/.profile ]; then . ~/.profile; fi
if [[ -e ~/.bashrc && $- = *i* ]]; then . ~/.bashrc; fi

Beachten Sie, dass eine noch bash weirder quirk aufweist: wenn es eine nicht-interaktive Login - Shell und der Eltern - Prozess ist rshdoder sshdschlagQuellen ~/.bashrc(aber nicht ~/.bash_profileoder ~/.profile). Vielleicht möchten Sie dies ganz oben auf Ihre Liste setzen .bashrc:

if [[ $- != *i* ]]; then return; fi

Siehe auch Unterschied zwischen .bashrc und .bash_profile und Unterschied zwischen Login-Shell und Nicht-Login-Shell?

Gilles 'SO - hör auf böse zu sein'
quelle
Diese Macken sind aus Sicherheitsgründen (laden Sie keine unerwarteten Dateien, wenn Sie in einer sicherheitsrelevanten Einstellung ausgeführt werden).
vonbrand
2
@vonbrand Er, was? Nein, diese Macken haben absolut nichts mit Sicherheit zu tun. Es gibt keine „unerwarteten Dateien“ (außer dass das Laden .bashrcin einer nicht interaktiven Einstellung tatsächlich als unerwartet gelten kann) oder eine Überprüfung eines sicherheitsrelevanten Kontexts.
Gilles 'SO - hör auf böse zu sein'
Ist dies eine Methode, um Schleifen zu verhindern?
Braiam
1
@Braiam Welche Schleifen?
Gilles 'SO - hör auf böse zu sein'