Warum liefert root kein .bash_profile?

10

Jedes Mal, wenn ich versuche, mich mit su(nicht su -) als root .bash_profileanzumelden , wird es nicht im Home-Verzeichnis von Benutzer1 gespeichert.

Grundsätzlich hat mein /var/rootVerzeichnis nicht .bash_profile, also habe ich eine Kopie von .bash_profilein /var/rootzum Testen gelegt su -.

Es wird auch nicht automatisch .bash_profile(in var/root) bezogen.

Wie auch immer, ich möchte .bash_profileaus Benutzer1 automatisch ein Root-Konto erstellen, wenn ich es verwende su.

Was soll ich machen?

(Es hat vorher funktioniert! Eines Tages hat es einfach keine Quelle! Vielleicht hat etwas die Einstellungen in Bash geändert? Es funktioniert, wenn ich source .bash_profilenach dem Login eingebe.)

Ich benutze Mac und OS X Yosemite.

Sirion
quelle

Antworten:

11

Die Standard-Shell für rootOS X ist /bin/sh. Es shist auch eine Version von bash, aber wenn es mit dem Namen shBash aufgerufen wird :

versucht, das Startverhalten historischer Versionen shso genau wie möglich nachzuahmen und dabei auch dem POSIX-Standard zu entsprechen.

Beim Aufruf als interaktive Anmeldeshell oder als nicht interaktive Shell mit der --loginOption wird zunächst versucht , Befehle von und in dieser Reihenfolge zu lesen und auszuführen . ... eine als sh aufgerufene Shell versucht nicht, Befehle aus anderen Startdateien zu lesen und auszuführen/etc/profile~/.profile

Das heißt, es wird überhaupt nicht gelesen .bash_profile, unabhängig davon, ob es als Anmeldeshell aufgerufen wurde oder nicht . Sie können .profilestattdessen verwenden oder sogar miteinander verknüpfen. Wenn Sie eine Login-Shell mit starten su -l, .profilewird diese beim Start geladen, wird es aber .bash_profilenie sein.


Sie können auch verwendendscl ( unter Hinweis darauf , dass root Shell zu ändern /etc/passwdist nicht die Shell auf OS X verwendet , um zu bestimmen). Sie können die aktuelle Shell von root mit überprüfen dscl . -read /Users/root UserShell. Konsultieren Sie die Dokumentation und überlegen Sie sorgfältig, bevor Sie sie in etwas anderes ändern.

Ein anderer Ansatz besteht einfach darin, Ihren suAufruf zu ändern , um die bashsofortige Ausführung zu erzwingen .

In Anbetracht dessen, was Sie gesagt haben, würde ich den Symlink wahrscheinlich empfehlen, aber Sie möchten vielleicht die Änderungen im POSIX-Modus von Bash untersuchen und entscheiden, ob Sie sie haben möchten oder nicht.

Michael Homer
quelle
5

Weil es nicht als "Login-Shell" betrachtet wird (die direkt von loginoder aufgerufen wird sshd), sondern als einfache "interaktive Shell". Siehe hier zum Beispiel: https://www.gnu.org/software/bash/manual/html_node/Bash-Startup-Files.html

So erzwingen suLogin - Option also mit -lOption:

su -l

Oder legen Sie Ihre Umgebung in eine .bashrcDatei.

myaut
quelle
5

Der Root-Benutzer versucht, die .bashrc-Datei anstelle des .bash_profile auszuführen, da Sie keine Anmeldeshell aufrufen.

Aus dem Bash-Handbuch man bash:

   ~/.bash_profile
          The personal initialization file, executed for login shells
   ~/.bashrc
          The individual per-interactive-shell startup file

Beachten Sie, ~wo sich die .bashrc-Datei im Homedirectory des Root-Benutzers befinden muss.

Um Ihre Frage tatsächlich zu beantworten, würde ich vorschlagen, dass Sie eine (symbolische) Verknüpfung zwischen der .bashrc-Quelle von Benutzer1 und dem Root-Benutzer herstellen, wenn Sie möchten, dass die .bashrc-Datei von Benutzer1 verwendet wird.

Sie können auch in Betracht ziehen, den Benutzer1 .bashrc oder sogar .bash_profile als Quelle zu verwenden, indem Sie die Zeile . /homedirectory/of/user1/.bash_profilezur .bashrc-Datei des Root-Benutzers hinzufügen .

Lambert
quelle