zsh:向提示添加警告是否满足特定条件

时间:2017-11-05 17:34:19

标签: command-prompt zsh

我的案例

我正在使用访问AWS的远程计算机。我有3个.aws/credential个文件:

credentials
dev-credentials
root-credentials

当我想使用我的root凭据时,我使用以下.zshrc别名:

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

我的问题

使用根证书是危险的,我想要一个强大的视觉命令提示符指示我正在使用它。要测试的条件很简单 - ~/.aws/root-credentials的内容是否等于~/.aws/credentials的内容。

我的问题

如果两个文件相同,我怎样才能在提示符中添加(粗体红色!)文本?

1 个答案:

答案 0 :(得分:1)

管理证书文件的更好方法可能是使用符号链接。 让我构建一个与你的设置非常相似的设置,你可以适应。 您可以直接在Zsh会话中输入所有这些内容。

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

这些以一致的 creds 前缀命名,以便在一起显示 列表。

现在你有一个符号链接,你可以随意改变指向一个或 另一个。例如,使开发版本处于活动状态:

ln -sf creds-dev creds-active

可以检查哪个处于活动状态的功能使用readlink 符号链接,看起来像:

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

-P告诉print处理提示字符。 %K适用于。{1}} 背景; %B是大胆的。 %b%k将其拒之门外 关闭。净结果是大胆的红色ROOTCERT。这是可以测试的; 试试吧。

Zsh提示在每次渲染之前调用precmd函数。用它 将您的电话添加到certdetect并根据它设置变量:

precmd() { PR_ROOTCERT=$(certdetect) }

然后,您可以设置提示以包含动态变量。一个 示例提示仅包含:

PROMPT='$PR_ROOTCERT%# '

一旦你完成了所有这些工作,你就会想要将它的作品添加到你的作品中 活跃的prompt_«whatever»文件。