Ich muss ein Skript ausführen, wenn ich mich in meinem Ubuntu an- und abmelden möchte.
Ich habe versucht, das Skript in mein zu setzen, ~/.bash_login
aber es hat nicht funktioniert.
Gibt es einen besseren Ort, an dem ich mein Skript ausführen kann?
Mein Skript befindet sich in /home/gsd/script/login.sh
und ist ausführbar.
bearbeiten:
Mein Skript wird ausgeführt, wenn ich tippe: /home/gsd/script/login.sh
und es wird mit + x gesetzt
jetzt habe ich nur noch: touch /home/gsd/test.txt
im ~/.bash_login
test.
Die Datei test.txt wird nie erstellt
2 bearbeiten:
gsd@laptop:~$ ll ~/.bash*
-rw------- 1 gsd gsd 38639 2012-01-25 17:25 .bash_history
-rw-r--r-- 1 gsd gsd 29 2012-01-25 15:22 .bash_login
-rw-r--r-- 1 gsd gsd 220 2011-11-03 19:22 .bash_logout
-rw-r--r-- 1 gsd gsd 3136 2011-11-04 08:00 .bashrc
~/.bash_profile
?-rw-r--r-- 1 gsd gsd 313 2012-01-22 11:56 .bash_login
chmod +x .bash_login
chmod +x .bash_login
das ausführbare Bit auf .bash_login zu setzen. Das Bash-Handbuch ist in diesem Bereich etwas verwirrend, aber Bash führt .bash_login nicht wie ein Shell-Skript aus. Es liest die Datei und führt dann die darin enthaltenen Befehle aus (Sie können etwas Ähnliches tun, indem Sie ausführensource ~/.bash_login
).Antworten:
Wenn .bash_profile vorhanden ist, liest Bash nicht .bash_login (oder .profile). Diese nervige Funktion wird in einigen Versionen des Bash-Handbuchs beschrieben, jedoch nicht in allen.
.bash_profile
und.bash_login
sind analog, daher empfehle ich Ihnen, Ihre Befehle einzugeben.bash_profile
, da es häufig verwendet wird und.bash_login
relativ unbekannt ist. Ziehen Sie auch in Betracht, Ihre Befehle.bashrc
anstelle von einzugeben.bash_profile
. Das Handbuch beschreibt den Unterschied zwischen "Interactive Non-Login Shell" und "Interactive Login Shell". Lesen Sie daher unbedingt diesen Abschnitt.Das GNU Bash Referenzhandbuch Version 4.1: Bash Startup Files sagt:
Siehe auch diese Frage zum Superuser und dieses Bash-Howto .
Aktualisieren Sie , da Sie sagen, dass Sie kein .bash_profile haben.
Es hört sich so an, als würden Sie keine so genannte "interaktive Shell ohne Anmeldung" verwenden (eine ausführliche Beschreibung finden Sie im Bash-Handbuch).
Um dies zu testen, fügen Sie so etwas wie die folgenden jede Datei:
.bashrc
,.bash_profile
und.bash_login
.Melden Sie sich dann ab und wieder an. Wenn Sie sich einloggen, werden Sie bestimmt nur den Satz "DEBUG: Ich bin .bashrc" sehen, aber nicht "Ich bin .bash_profile". Wenn ja, bedeutet dies, dass Sie eine "interaktive Shell ohne Anmeldung" sind, was einfach bedeutet, dass Bash aufruft,
.bashrc
aber nicht.bash_profile
. Informationen dazu, warum diese Punktedateien so sind, finden Sie in @Andrejs Cainikovs 'Post unten und unter http://mywiki.wooledge.org/DotFilesquelle
Login-Shells, egal ob sie interaktiv oder nicht interaktiv sind, lesen und führen die aus
.profile
Interaktive Shells lesen und ausführen
.bashrc
.Oft werden Sie feststellen, dass
/etc/profile
Quellen.bashrc
- daher werden alle in vorgenommenen Einstellungen.bashrc
auch in einer Anmeldeshell wirksam, unabhängig davon, ob diese interaktiv oder nicht interaktiv ist.Die Reihenfolge der Ausführung der Initialisierungsskripts für eine Shell hängt davon ab, ob die Shell interaktiv oder nicht interaktiv ist und ob es sich um ein Anmeldeskript handelt oder nicht.
Wenn bash als interaktive Anmeldeshell aufgerufen wird , liest es Befehle aus der
/etc/profile
. Dann wird Bash versuchen, NUR die erste Datei auszuführen, die existiert und folgende Informationen enthält:.bash_profile
.bash_login
.profile
Wenn eine dieser Dateien gefunden wird, aber nicht gelesen werden kann, wird ein Fehler verursacht. Es liegt kein Fehler vor, wenn KEINE gefunden wurden.
Der gleiche Vorgang wird ausgeführt, wenn eine nicht interaktive Anmeldeshell mit der
--login
Option aufgerufen wird .quelle
.profile
Datei wird nur gelesen und ausgeführt, wenn sich der Benutzer über die grafische Oberfläche anmeldet. Sonst wird es nicht gelesen.~/.profile
definitiv in nicht-grafischen Login-Shells gelesen (ich habe es getestet, indem ich zu einem anderen Terminal gewechselt habe und mich dort angemeldet habeCtrl+Alt+F2
)..profile
kann nur gelesen werden.bashrc
Stellen Sie sicher, dass das Skript, das Sie ausführen möchten, ausführbar ist. Führen
chmod +x scriptname
Sie das aus. Stellen Sie außerdem sicher, dass das Skript mit dem richtigen Shebang startet (#!/bin/bash
für Shell-Skripte). Verwenden Sie zum Schluss alle vollständigen Pfade, wenn Sie es ausführen, z. B./usr/bin/echo
anstattecho
nur die Umgebung einzuschalten, in der Ihr Skript ausgeführt wird, ist nicht identisch mit der, die Sie gewohnt sind.quelle
Bash sucht nur nach
.bash_login
oder.profile
Dateien, wenn es als interaktive Login-Shell ausgeführt wird. Wenn es als interaktive Nicht-Login-Shell ausgeführt wird, liest es.bashrc
.In der Regel ist es der zweite Fall, dh wenn Sie
gnome-terminal
bash ausführen, wird es als Nicht-Login-Shell ausgeführt.Dies besagt eindeutig, dass Gnome beim Booten
.bash_login
nicht ausgeführt wird. Wenn Sie jedoch den Runlevel senken, um direkt mit bash zu booten, wird dieselbe Datei nach erfolgreicher Anmeldung ausgeführt.Ich gehe davon aus
.bash_login
, dass es auch bei entfernten SSH-Verbindungen ausgeführt wird.Teilweise von hier abgerissen .
quelle