Ich weiß, dass ich einmal weiß, wie das geht, aber ... wie führt man ein Skript (Bash ist in Ordnung) beim Anmelden unter Unix aus?
Antworten:
Aus Wikipedia Bash
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.
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.
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. Einrichten ssh-agent
oder 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)
Platziere es in deinem Bash-Profil :
~/.bash_profile
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
Artikel
launchctl load /Library/LaunchDaemons/com.bob.plist
Gegenstand stoppen
launchctl unload /Library/LaunchDaemons/com.bob.plist
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>
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
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.
Das Skript ~/.bash_profile
wird beim Login ausgeführt.