Wenn eine Login-Shell beendet wird, bash liest und führt Befehle aus der Datei aus ~ / .bash_logout, falls vorhanden. Dieses Verfahren wird im Detail erläutert login und bash man-Seiten.
7.2.3. Ein typischer Satz Setup-Dateien
7.2.3.1. /etc/profile-Beispiel
Schauen wir uns einige dieser Konfigurationsdateien an. Erste / etc / profile gelesen wird, in dem wichtige Variablen wie z
PATH, USER und HOSTNAME sind festgelegt:
debby:~> cat /etc/profile
# /etc/profile
# Systemweite Umgebung und Startprogramme für die Anmeldeeinrichtung
# Funktionen und Aliase befinden sich in /etc/bashrc
# Pfadmanipulation
if [ `id -u` = 0 ] && ! echo $PATH | /bin/grep -q "/sbin" ; dann PATH=/sbin:$PATH
fi
if [ `id -u` = 0 ] && ! echo $PATH | /bin/grep -q "/usr/sbin" ; dann PATH=/usr/sbin:$PATH
fi
if [ `id -u` = 0 ] && ! echo $PATH | /bin/grep -q "/usr/local/sbin" dann
PATH=/usr/local/sbin:$PATH
fi
Wenn ! echo $PATH | /bin/grep -q "/usr/X11R6/bin" ; dann PATH="$PATH:/usr/X11R6/bin"
fi
debby:~> cat /etc/profile
# /etc/profile
# Systemweite Umgebung und Startprogramme für die Anmeldeeinrichtung
# Funktionen und Aliase befinden sich in /etc/bashrc
# Pfadmanipulation
if [ `id -u` = 0 ] && ! echo $PATH | /bin/grep -q "/sbin" ; dann PATH=/sbin:$PATH
fi
if [ `id -u` = 0 ] && ! echo $PATH | /bin/grep -q "/usr/sbin" ; dann PATH=/usr/sbin:$PATH
fi
if [ `id -u` = 0 ] && ! echo $PATH | /bin/grep -q "/usr/local/sbin" dann
PATH=/usr/local/sbin:$PATH
fi
Wenn ! echo $PATH | /bin/grep -q "/usr/X11R6/bin" ; dann PATH="$PATH:/usr/X11R6/bin"
fi
Diese Zeilen überprüfen den festzulegenden Pfad: if Wurzel Öffnet eine Shell (Benutzer-ID 0), das wird überprüft / sbin, / usr / sbin und
/usr/local/sbin befinden sich im Pfad. Wenn nicht, werden sie hinzugefügt. Das wird bei jedem überprüft
/usr/X11R6/bin befindet sich im Pfad.
# Standardmäßig keine Kerndateien ulimit -S -c 0 > /dev/null 2>&1
# Standardmäßig keine Kerndateien ulimit -S -c 0 > /dev/null 2>&1
Der gesamte Müll geht an / dev / null wenn der Benutzer diese Einstellung nicht ändert.
USER=`id -un` LOGNAME=$USER
MAIL="/var/spool/mail/$USER"
HOSTNAME=`/bin/hostname` HISTSIZE=1000
USER=`id -un` LOGNAME=$USER
MAIL="/var/spool/mail/$USER"
HOSTNAME=`/bin/hostname` HISTSIZE=1000
Hier werden allgemeinen Variablen die richtigen Werte zugewiesen.
if [ -z "$INPUTRC" -a ! -f "$HOME/.inputrc" ]; dann INPUTRC=/etc/inputrc
fi
if [ -z "$INPUTRC" -a ! -f "$HOME/.inputrc" ]; dann INPUTRC=/etc/inputrc
fi
Wenn die Variable EINGANG ist nicht eingestellt, und es gibt keine .inputrc im Home-Verzeichnis des Benutzers wird dann die Standard-Eingabesteuerdatei geladen.
exportieren PATH USER LOGNAME MAIL HOSTNAME HISTGRÖSSE EINGANG
Alle Variablen werden exportiert, sodass sie anderen Programmen zur Verfügung stehen, die Informationen über Ihre Umgebung anfordern.
7.2.3.2. Das Verzeichnis „profile.d“.
für i in /etc/profile.d/*.sh ; do if [ -r $i ]; Dann
. $i
fi erledigt unset i
für i in /etc/profile.d/*.sh ; do if [ -r $i ]; Dann
. $i
fi erledigt unset i
Alle lesbaren Shell-Skripte aus dem /etc/profile.d Verzeichnis werden gelesen und ausgeführt. Diese bewirken beispielsweise die Aktivierung Farbls, Aliasing vi zu vim, Gebietsschemas festlegen usw. Die temporäre Variable i ist deaktiviert, um zu verhindern, dass es später das Shell-Verhalten stört.
7.2.3.3. .bash_profile-Beispiel
Dann bash sucht nach a Bash_profile im Home-Verzeichnis des Benutzers:
debby:~> cat .bash_profile
.. ###############
# #
# .bash_profile-Datei #
# #
# Wird von der Bash-Shell ausgeführt, wenn Sie sich anmelden. #
# #
.. ###############
Quelle ~/.bashrc Quelle ~/.bash_login
Diese sehr einfache Datei weist Ihre Shell an, zuerst zu lesen ~ / .bashrc und dann ~ / .bash_login. Sie werden auf das stoßen Quelle Integrierter Shell-Befehl regelmäßig beim Arbeiten in einer Shell-Umgebung: Er wird verwendet, um Konfigurationsänderungen auf die aktuelle Umgebung anzuwenden.
7.2.3.4. .bash_login-Beispiel
Das ~ / .bash_login file definiert den Standarddateischutz durch Festlegen von umask Wert siehe Abschnitt 3.4.2.2. Der ~ / .bashrc Die Datei wird verwendet, um eine Reihe benutzerspezifischer Aliase und Funktionen sowie persönliche Umgebungsvariablen zu definieren. Es liest sich zunächst / Etc / bashrc, das die Standardaufforderung beschreibt (PS1) und den Standardwert für umask. Danach können Sie Ihre eigenen Einstellungen hinzufügen. Wenn nein ~ / .bashrc existiert, / Etc / bashrc wird standardmäßig gelesen.
7.2.3.5. /etc/bashrc-Beispiel
Ihr / Etc / bashrc Datei könnte so aussehen:
debby:~> cat /etc/bashrc
# /etc/bashrc
# Systemweite Funktionen und Aliase
# Umgebungsinhalte kommen in /etc/profile
# Standardmäßig möchten wir, dass dies festgelegt wird.
debby:~> cat /etc/bashrc
# /etc/bashrc
# Systemweite Funktionen und Aliase
# Umgebungsinhalte kommen in /etc/profile
# Standardmäßig möchten wir, dass dies festgelegt wird.
# Auch für nicht interaktive Shells ohne Anmeldung.
if [ `id -gn` = `id -un` -a `id -u` -gt 99 ]; dann umask 002
sonst
Maske 022
fi
# Auch für nicht interaktive Shells ohne Anmeldung.
if [ `id -gn` = `id -un` -a `id -u` -gt 99 ]; dann umask 002
sonst
Maske 022
fi
Diese Zeilen legen die fest umask Wert. Dann wird je nach Shell-Typ die Eingabeaufforderung gesetzt:
# Sind wir eine interaktive Hülle? if [ "$PS1" ]; Dann
if [ -x /usr/bin/tput ]; Dann
if [ "x`tput kbs`" != "x" ]; Dann
# Wir können dies nicht mit dem „dummen“ Terminal tun, indem wir „tput kbs“ löschen
elif [ -x /usr/bin/wc ]; Dann
if [ "`tput kbs|wc -c `" -gt 0 ]; Dann
# Wir können dies nicht mit dem „dummen“ Terminal tun, indem wir „tput kbs“ löschen
fi fi
fi
Fall $TERM in
xterm*)
if [ -e /etc/sysconfig/bash-prompt-xterm ]; dann PROMPT_COMMAND=/etc/sysconfig/bash-prompt-xterm
sonst
PROMPT_COMMAND='echo -ne "\033]0;${USER}@${HOSTNAME%%.*}:\
${PWD/$HOME/~}\007"'
fi
;;
*)
[ -e /etc/sysconfig/bash-prompt-default ] && PROMPT_COMMAND=\
/etc/sysconfig/bash-prompt-default
;;
esac
[ "$PS1" = "\\s-\\v\\\$ " ] && PS1="[\u@\h \W]\\$ "
if [ "x$SHLVL" != "x1" ]; then # Wir sind keine Login-Shell für i in /etc/profile.d/*.sh; Tun
if [ -x $i ]; Dann
. $i
fi
erledigt
fi
fi
# Sind wir eine interaktive Hülle? if [ "$PS1" ]; Dann
if [ -x /usr/bin/tput ]; Dann
if [ "x`tput kbs`" != "x" ]; Dann
# Wir können dies nicht mit dem „dummen“ Terminal tun, indem wir „tput kbs“ löschen
elif [ -x /usr/bin/wc ]; Dann
if [ "`tput kbs|wc -c `" -gt 0 ]; Dann
# Wir können dies nicht mit dem „dummen“ Terminal tun, indem wir „tput kbs“ löschen
fi fi
fi
Fall $TERM in
xterm*)
if [ -e /etc/sysconfig/bash-prompt-xterm ]; dann PROMPT_COMMAND=/etc/sysconfig/bash-prompt-xterm
sonst
PROMPT_COMMAND='echo -ne "\033]0;${USER}@${HOSTNAME%%.*}:\
${PWD/$HOME/~}\007"'
fi
;;
*)
[ -e /etc/sysconfig/bash-prompt-default ] && PROMPT_COMMAND=\
/etc/sysconfig/bash-prompt-default
;;
esac
[ "$PS1" = "\\s-\\v\\\$ " ] && PS1="[\u@\h \W]\\$ "
if [ "x$SHLVL" != "x1" ]; then # Wir sind keine Login-Shell für i in /etc/profile.d/*.sh; Tun
if [ -x $i ]; Dann
. $i
fi
erledigt
fi
fi
7.2.3.6. .bash_logout-Beispiel
Beim Abmelden werden die Befehle angezeigt ~ / .bash_logout werden ausgeführt, was beispielsweise das Terminal löschen kann, sodass Sie beim Abmelden von einer Remote-Sitzung oder beim Verlassen der Systemkonsole ein sauberes Fenster haben:
debby:~> cat .bash_logout
# ~/.bash_logout
klar
debby:~> cat .bash_logout
# ~/.bash_logout
klar
Schauen wir uns im nächsten Abschnitt genauer an, wie diese Skripte funktionieren. Halten Info bash in unmittelbarer Nähe.