2017-11-05 2 views
1

Mein Fall

Ich arbeite an einem Remote-Computer, der auf AWS zugreift. Ich habe 3 .aws/credential Dateien:zsh: Hinzufügen einer Warnung zur Eingabeaufforderung, wenn eine bestimmte Bedingung erfüllt ist

credentials 
dev-credentials 
root-credentials 

Wenn ich möchte, dass meine Root-Berechtigungen verwenden, verwende ich die folgende .zshrc Aliase:

alias rootcert="cp ~/.aws/root-credentials ~/.aws/credentials" 
alias devcert="cp ~/.aws/dev-credentials ~/.aws/credentials" 

Mein Problem

Mit Root-Zertifikate ist gefährlich, und ich möchte eine starke visuelle Eingabeaufforderung anzeigen, dass ich es benutze. Die Bedingung zum Testen ist einfach - ob der Inhalt von ~/.aws/root-credentials dem von ~/.aws/credentials entspricht.

Meine Frage

Wie kann ich ein (fett rot!) Text auf meine Aufforderung, wenn zwei Dateien identisch sind?

Antwort

1

Ein besserer Ansatz zur Verwaltung der Cert-Dateien könnte die Verwendung von Symlinks sein. Lassen Sie mich ein Setup erstellen, das Ihrem ähnelt, das Sie anpassen können. Sie können alle diese direkt in Ihre Zsh-Sitzung eingeben.

cd tmp 
touch creds-dev creds-root 
ln -s creds-root creds-active 

Diese werden mit einem konsistenten creds Präfix benannt zusammen Auflistung in einer zu zeigen.

Jetzt haben Sie einen Symlink, den Sie nach Belieben ändern können, um auf den einen oder den anderen zu zeigen. Zum Beispiel aktiv, um die Entwickler-Version zu machen:

ln -sf creds-dev creds-active 

Eine Funktion, die den Symlink folgen aktiven Anwendungen readlink ist, kann prüfen, welche und wie folgt aussieht:

certdetect() { [[ $(readlink creds-active) == "creds-root" ]] && 
    print -P '%K{red}%BROOTCERT%b%k ' || print } 

Die -Pprint Aufforderung zu verarbeiten erzählt Figuren. Die %K ist für Einstellung Hintergrund; %B ist fett. Die %b und %k schalten sie zurück aus. Das Nettoergebnis ist ein fettes Rot ROOTCERT. Dies ist jetzt testbar; versuchen Sie es einfach anzurufen.

Eine Zsh-Eingabeaufforderung ruft vor jedem Rendering eine precmd-Funktion auf. Verwenden Sie es Ihren Anruf certdetect hinzuzufügen und eine Variable basierend darauf:

precmd() { PR_ROOTCERT=$(certdetect) } 

Dann können Sie Ihre prompte setzen die dynamische Variable enthalten. Eine Beispiel Eingabeaufforderung, die nur die Merkmale:

PROMPT='$PR_ROOTCERT%# ' 

Wenn Sie all diese Arbeit haben, sollten Sie seine Stücke auf Ihre aktive prompt_«whatever» Datei hinzuzufügen.

+0

Schöne Antwort und weiche Links sind definitiv der Weg zu gehen. Ich werde es versuchen. –

Verwandte Themen