Wie schreibe ich ein Shell-Skript, das beim Login ausgeführt wird?

15

Ich versuche, ein Bash-Shell-Skript in der Linux-Distribution Ubuntu 11.10 zu schreiben, das beim Anmelden am System automatisch ausgeführt wird. Aber ich bin nicht in der Lage herauszufinden, was in ein Skript zu schreiben ist, das dadurch beim Anmelden automatisch ausgeführt wird.

dubex
quelle

Antworten:

17

Wenn Sie möchten, dass es global ist, ändern Sie es

 /etc/profile 

oder fügen Sie ein Skript hinzu

 /etc/profile.d

Wenn Sie möchten, dass es benutzerspezifisch ist, ändern Sie es

 /home/$USER/.profile
wei2912
quelle
1
Vergessen Sie nicht, dass die Erweiterung sein sollte, .shwenn Sie Ihr Skript in setzen /etc/profile.d/. chmode +x /etc/profile.d/myscript.shnatürlich auch.
Brian Haak
Raspbian Stretch. Es wird versucht, einen /usr/local/bin/pihole -cBefehl für die automatische Anmeldung eines bestimmten Benutzers auszuführen . Diese Zeile wurde hinzugefügt zu /home/$USER/.profile- nichts passiert. Wenn ich ein Skript hinzufüge, /etc/profile.dfunktioniert es, aber es ist global und wird ausgeführt, selbst wenn ich eine SSH-Sitzung öffne (was nicht das ist, was ich will). Das Hinzufügen zu .bashrcfunktioniert auch, wird aber jedes Mal ausgeführt, wenn ich eine neue Shell öffne (was nicht das ist, was ich will). Frage: Warum würde das Hinzufügen zu /home/$USER/.profilenicht funktionieren ???
Drew
3

Fügen Sie einfach das Bash-Skript zu den Startanwendungen hinzu.

Geben Sie im Befehlsfeld ein

bash /full/path/to/bash/script.sh/
Jokerdino
quelle
2
Wie fügt man den Startanwendungen über die Befehlszeile "bash /.../script.sh" hinzu?
Aleb
1
OP erwähnte nie eine GUI; was ist, wenn sie sind auf einem Remote - Server über SSH und nicht haben eine GUI? Keines der Desktop-Tags wurde auf die Frage angewendet ...
Doktor J
Der Titel erwähnt speziell beim Anmelden und nichts über Desktop-GUIs.
RichieHH
0

Wenn Sie bashspezifischer sein möchten, können Sie Ihren Code auch in ~ / .bash_profile oder ~ / .bash_login schreiben.

Und Sie können jedes Skript darin zum Beispiel beziehen:

if [ -f ~/.bashrc ]; then
   source ~/.bashrc
fi
Dieter.Wilhelm
quelle
0

/etc/profileoder $HOME/.profileoder$HOME/.bash_profile

Ich würde dringend empfehlen, nicht zu verwenden, /etc/profile.d/yourscript.shwenn es Ausgabe erzeugt. Wenn Sie eine nicht interaktive Sitzung verwenden, erhalten Sie eine $TERM is not setNachricht. Dies macht sich bei Verwendung des ssh-Protokolls wie scp bemerkbar. Normalerweise keine große Sache, aber Veeam mag es nicht und wird eine Warnung auslösen. Ich weiß, dass Veeam hier nicht das Thema ist, aber es ist erwähnenswert, dass nicht alle Anwendungen die $TERM is not setWarnung ordnungsgemäß ignorieren .

Kurz gesagt, wenn das Skript eine Ausgabe generiert, platzieren Sie diese an den in der ersten Zeile angegebenen Stellen. Wenn Sie jedoch die Umgebung ändern und Ihr Skript keine Ausgabe generiert, verwenden Sie Letzteres.

Hickory420
quelle