Wie installiere und deinstalliere ich ein Skript, das in allen interaktiven Shells über Yum auf Centos bereitgestellt wird?

Wie installiere und deinstalliere ich ein Skript, das in allen interaktiven Shells über Yum auf Centos bereitgestellt wird?

Ich möchte ein RPM verpacken, installieren und deinstallieren, das beim Start aller interaktiven Shells für alle Benutzer (eigentlich zumindest sowohl bei der Bash-SSH-Sitzung als auch beim Bash-Gnome-Terminal) eine kontextbezogene Warnmeldung hinzufügen kann. Grundsätzlich würde der Code die Warnmeldung anzeigen, wenn eine Datei fehlt.

Nun, die Kandidaten sind /etc/bashrc, /etc/profile, /etc/profile.d/myscript.sh, /etc/skel/.bash_profile, /etc/skel/.bashrc.

Am einfachsten wäre es, etwas in zu installieren, /etc/profile.daber das erfüllt nicht wirklich meine Anforderungen (SSH-Bash-Sitzung).
Ich denke, der richtige Ort ist /etc/skel/.bashrc + exisiting .bashrc, aber ich fühle mich nicht sicher dabei, meinen Code an diese Dateien anzuhängen/aus diesen Dateien zu entfernen … Ich verstehe das so: yumund rpmlegt und entfernt Dateien; sie sind nicht dafür ausgelegt, Textdateien sicher zu ändern.
Ich hätte gerne so etwas wie /etc/bashrc.d/

Wo soll ichsicher installierendie Warnmeldung, damit sie in allen interaktiven Shells verfügbar ist undsicher deinstalliert? Mit sicher meine ich, ohne etwas Unerwünschtes zu löschen.

Antwort1

Die Datei /etc/bashrcist %config(noreplace)im setupRPM als Datei gekennzeichnet. Das bedeutet, dass, wenn Sie sie aktualisieren yum,nichtersetzen. Wenn beim Upgrade eines Pakets ein aktualisiertes vorhanden ist /etc/bashrc, yumwird erstellt /etc/bashrc.rpmnew. SiedürfenSie können es bei Bedarf sicher ändern.

Aber es scheint, dass das nicht notwendig ist. Werfen Sie einen Blick auf /etc/bashrcIhr CentOS/Rhel/Fedora/usw.-System und Sie werden Folgendes finden:

if ! shopt -q login_shell ; then # We're not a login shell
[...]
    for i in /etc/profile.d/*.sh; do
        if [ -r "$i" ]; then
            if [ "$PS1" ]; then
                . "$i"
            else
                . "$i" >/dev/null
            fi
        fi
    done
[...]

Dieser Code stellt sicher, dass die Dateien /etc/profile.dsowohl für Login-Shells (in diesem Fall werden sie /etc/profilestattdessen von ausgeführt) als auch für Nicht-Login-Shells (in diesem Fall übernimmt diese Schleife ihre Ausführung) ausgeführt werden.

Mit anderen Worten, Siebereitshabe ein /etc/bashrc.d, und es heißt /etc/profile.d.

verwandte Informationen