Wenn Bash gestartet wird, werden die Befehle in verschiedenen Skripten ausgeführt.
Wenn Bash als interaktive Anmeldeshell aufgerufen wird, werden zuerst Befehle aus der Datei / etc / profile gelesen und ausgeführt, sofern diese Datei vorhanden ist. Nach dem Lesen dieser Datei sucht sie in dieser Reihenfolge nach ~ / .bash_profile, ~ / .bash_login und ~ / .profile und liest und führt Befehle von der ersten vorhandenen und lesbaren aus.
Wenn eine Anmeldeshell beendet wird, liest Bash Befehle aus der Datei ~ / .bash_logout und führt sie aus, falls vorhanden.
Wenn eine interaktive Shell gestartet wird, die keine Anmeldeshell ist, liest Bash Befehle von ~ / .bashrc und führt sie aus, sofern diese Datei vorhanden ist. Dies kann durch Verwendung der Option --norc verhindert werden. Die Option --rcfile file zwingt Bash, Befehle aus der Datei anstelle von ~ / .bashrc zu lesen und auszuführen.
Nur ein Jahrzehnt zu spät, aber: Was ist, wenn für diesen Befehl sudo erforderlich ist (z. B. das Mounten einer Netzwerkfreigabe von einem NAS in das Home
-Verzeichnis
@ Mike'Pomax'Kamermans ausgezeichnete Frage, vielleicht wird das Sudo angenommen, da es in den Systemdateien ist?
Webwoman
vielleicht, aber vielleicht auch nicht - hoffentlich kann das noch jemand für uns beantworten = (
Mike 'Pomax' Kamermans
29
Bei der Anmeldung führen die meisten Shells ein Anmeldeskript aus, mit dem Sie Ihr benutzerdefiniertes Skript ausführen können. Das Anmeldeskript, das die Shell ausführt, hängt natürlich von der Shell ab:
Sie können wahrscheinlich herausfinden, welche Shell Sie verwenden, indem Sie dies tun
echo$SHELL
von der Eingabeaufforderung.
Für eine etwas umfassendere Definition von "Login" ist es hilfreich zu wissen, dass in den meisten Distributionen beim Start von X Ihre .xsessionrc ausgeführt wird, wenn Ihre X-Sitzung gestartet wird.
echo $ 0 sollte zeigen, welche Shell verwendet wird, obwohl ich gelegentlich 'sh' gesehen habe, wenn es wirklich 'ksh' ist - unter HP-UX oder Solaris, denke ich.
Dr.-Jan
10
Bei der Verwendung von Bash, den ersten ~/.bash_profile, ~/.bash_loginund ~/.profilewird für ein interaktiv Login - Shell ausgeführt werden. Ich glaube, dass ~/.profileBix neben Shash im Allgemeinen von Unix-Shells betrieben wird. Bash wird ~/.bashrcfür eine interaktive Shell ohne Anmeldung ausgeführt.
Normalerweise setze ich alles ein, was ich immer einrichten möchte, .bashrcund führe es dann aus .bash_profile. Dort richte ich auch einige Dinge ein, die nur ausgeführt werden sollen, wenn ich mich anmelde, z. B. Einrichten ssh-agentoder Ausführen screen.
Wenn Sie ein Skript und nur ein Skript ausführen möchten , können Sie festlegen, dass der Benutzer die Standard-Shell verwendet.
echo"/usr/bin/uptime" >> /etc/shells
vim /etc/passwd
* username:x:uid:grp:message:homedir:/usr/bin/uptime
kann interessante Effekte haben :) (es ist nicht sicher, also vertraue ihm nicht zu sehr. Nichts wie das Festlegen deiner Standard-Shell als Skript, das dein Laufwerk löscht. ... obwohl ... Ich kann mir ein Szenario vorstellen, in dem das so ist könnte erstaunlich nützlich sein)
Ich war tagelang mit diesem Problem frustriert. Bei Ubuntu hat nichts funktioniert. Wenn ich den Anruf in / etc / profile schreibe, stürzt alles beim Anmeldeversuch ab. Ich konnte "Startup Applications" nicht verwenden, da dies nicht das war, was ich wollte. Dadurch wird nur das Skript für diesen aktuellen Benutzer festgelegt.
Fügen Sie einen Eintrag hinzu /etc/profile, der das Skript ausführt. Dies wird bei jeder Anmeldung ausgeführt. Wenn Sie dies nur für Ihr eigenes Konto tun, verwenden Sie eines Ihrer Anmeldeskripte (z. B. .bash_profile), um es auszuführen.
Durchsuchen Sie die Bash-Manpage Ihres lokalen Systems nach ^ INVOCATION, um Informationen darüber zu erhalten, welche Datei beim Start gelesen werden soll.
man bash
/^INVOCATION
Auch im Abschnitt DATEIEN,
~/.bash_profile
The personal initialization file, executed for login shells
~/.bashrc
The individual per-interactive-shell startup file
Fügen Sie Ihr Skript der richtigen Datei hinzu. Stellen Sie sicher, dass sich das Skript im $ PATH befindet, oder verwenden Sie den absoluten Pfad zur Skriptdatei.
Antworten:
Aus Wikipedia Bash
quelle
Bei der Anmeldung führen die meisten Shells ein Anmeldeskript aus, mit dem Sie Ihr benutzerdefiniertes Skript ausführen können. Das Anmeldeskript, das die Shell ausführt, hängt natürlich von der Shell ab:
Sie können wahrscheinlich herausfinden, welche Shell Sie verwenden, indem Sie dies tun
echo $SHELL
von der Eingabeaufforderung.
Für eine etwas umfassendere Definition von "Login" ist es hilfreich zu wissen, dass in den meisten Distributionen beim Start von X Ihre .xsessionrc ausgeführt wird, wenn Ihre X-Sitzung gestartet wird.
quelle
Bei der Verwendung von Bash, den ersten
~/.bash_profile
,~/.bash_login
und~/.profile
wird für ein interaktiv Login - Shell ausgeführt werden. Ich glaube, dass~/.profile
Bix neben Shash im Allgemeinen von Unix-Shells betrieben wird. Bash wird~/.bashrc
für eine interaktive Shell ohne Anmeldung ausgeführt.Normalerweise setze ich alles ein, was ich immer einrichten möchte,
.bashrc
und führe es dann aus.bash_profile
. Dort richte ich auch einige Dinge ein, die nur ausgeführt werden sollen, wenn ich mich anmelde, z. B. Einrichtenssh-agent
oder Ausführenscreen
.quelle
Wenn Sie ein Skript und nur ein Skript ausführen möchten , können Sie festlegen, dass der Benutzer die Standard-Shell verwendet.
echo "/usr/bin/uptime" >> /etc/shells vim /etc/passwd * username:x:uid:grp:message:homedir:/usr/bin/uptime
kann interessante Effekte haben :) (es ist nicht sicher, also vertraue ihm nicht zu sehr. Nichts wie das Festlegen deiner Standard-Shell als Skript, das dein Laufwerk löscht. ... obwohl ... Ich kann mir ein Szenario vorstellen, in dem das so ist könnte erstaunlich nützlich sein)
quelle
Wenn Sie unter OSX arbeiten, ist dies der Fall
~/.profile
quelle
Platziere es in deinem Bash-Profil :
quelle
Launchd
ist der bevorzugte Weg in OS X.Wenn Sie möchten, dass es bei Ihrem Login ausgeführt wird, geben Sie es ein
~/Library/LaunchAgents
Start
launchd
ArtikelGegenstand stoppen
Beispiel
com.bob.plist
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>Label</key> <string>com.bob</string> <key>RunAtLoad</key> <true/> <key>ProgramArguments</key> <array> <string>/usr/bin/java</string> <string>-jar</string> <string>/Users/user/program.jar</string> </array> </dict> </plist>
quelle
Ich war tagelang mit diesem Problem frustriert. Bei Ubuntu hat nichts funktioniert. Wenn ich den Anruf in / etc / profile schreibe, stürzt alles beim Anmeldeversuch ab. Ich konnte "Startup Applications" nicht verwenden, da dies nicht das war, was ich wollte. Dadurch wird nur das Skript für diesen aktuellen Benutzer festgelegt.
Schließlich fand ich diesen kleinen Artikel: http://standards.freedesktop.org/autostart-spec/autostart-spec-0.5.html
Die Lösung wäre:
Finden Sie den Pfad $ XDG_CONFIG_DIRS heraus:
echo $ XDG_CONFIG_DIRS
Legen Sie Ihr Skript in dieses Verzeichnis
quelle
Fügen Sie einen Eintrag hinzu
/etc/profile
, der das Skript ausführt. Dies wird bei jeder Anmeldung ausgeführt. Wenn Sie dies nur für Ihr eigenes Konto tun, verwenden Sie eines Ihrer Anmeldeskripte (z. B..bash_profile
), um es auszuführen.quelle
Durchsuchen Sie die Bash-Manpage Ihres lokalen Systems nach ^ INVOCATION, um Informationen darüber zu erhalten, welche Datei beim Start gelesen werden soll.
Auch im Abschnitt DATEIEN,
~/.bash_profile The personal initialization file, executed for login shells ~/.bashrc The individual per-interactive-shell startup file
Fügen Sie Ihr Skript der richtigen Datei hinzu. Stellen Sie sicher, dass sich das Skript im $ PATH befindet, oder verwenden Sie den absoluten Pfad zur Skriptdatei.
quelle
Das Skript
~/.bash_profile
wird beim Login ausgeführt.quelle