如何在bash/zsh中自动发送新邮件通知?

4

嗯,我的问题标题有点模糊。现在让我清楚地解释一下。

我们知道bash中有一个"MAILCHECK",每隔几分钟bash会检查邮箱并在您有新邮件时向您发送消息。请注意,您不需要命令来获得此通知。如果有新邮件,Bash会自动打印一条消息。

这里,我有几个问题:

  1. 在我的zsh中没有这样的通知(也许我在我的.zshrc文件中遗漏了些什么)

  2. 如何更改bash/zsh中"新邮件通知"的格式

  3. 如何在bash/zsh中在任何命令执行完成后执行 特定命令。例如,当我键入 ls<enter> 时,将执行 ls,然后执行特定命令。如果我可以做到这一点,自动通知就完成了!

清楚了吗?有什么建议吗?


很酷的问题,顺便说一句,我必须尝试第三个! :) - Elias Dorneles
实际上,我想在 shell 中设置一个通知系统。我将考虑不仅是新邮件,还包括一些其他内容,比如朋友的生日、节日、某些网站的特定信息、天气等等。就这样。感谢大家的建议,你们的答案非常有帮助。 - Libin Wen
3个回答

4

1. 在zsh中进行邮件通知:

我认为它与bash类似;如果shell知道在哪里查找邮件,并且MAILCHECK参数设置为非负整数,则会发生邮件通知。

2. 更改邮件通知消息。

(来自man bash):

MAILPATH
  A colon-separated list of file names to be checked for mail.  The message to be
  printed when mail arrives in a particular file may be specified by separating
  the file name from the message with a '?'.  When used in the text of the
  message, $_ expands to the name of the current mailfile.  Example:
    MAILPATH='/var/mail/bfox?"You have mail":~/shell-mail?"$_ has mail!"'
  Bash  supplies  a default value for this variable, but the location of the user
  mail files that it uses is system dependent (e.g., /var/mail/$USER).

我认为zsh基本相同,除了还将mailpath公开为MAILPATH的数组版本。
3. 运行任意命令:
bash中,PS1的值被打印为命令提示符。除非未设置promptvars选项(默认设置),否则该字符串经过参数扩展、命令替换、算术扩展和引号移除后再使用。其中第二个意味着您可以将任意shell命令作为命令提示符的一部分执行。 zsh也具有相同的功能,由shell选项promptsubst(或正如man手册所述的PROMPT_SUBST)控制。与bash不同,该shell选项默认未设置。此外,您可能会发现无法更改PS1的值(如果您的发行版使用提示主题),因为提示主题会在每个命令提示符之前重置PS1
事实证明,在打印提示符之前(或在其他情况下;我只关注这种情况),zsh有一种不同的运行shell函数的机制。有一个名为precmd_functions的数组参数,其值是每个提示符之前要运行的函数的名称。(提示主题系统使用此机制在打印之前重置PS1。)

非常感谢您提供的详细解决方案。我认为我已经解决了所有的问题。 - Libin Wen

1

还有一个名为PROMPT_COMMAND的bash变量:

PROMPT_COMMAND

如果设置了该变量,其值将被解释为在每次打印主提示符($PS1)之前执行的命令。

假设您想知道上一个命令是否以非零状态退出:

$ PS1='\$ ' PROMPT_COMMAND='r=$?;(($r != 0)) && printf "[%d] " $r'
$ whoami
jackman
$ (exit 3)
[3] $ pwd
/home/jackman
$ 

1
我不太清楚如何回答问题1和2,但在交互式shell提示符中,在每个命令完成后执行某个命令的一种方法(问题3)是将代码添加到提示变量PS1中。以下是date命令的示例:
$ PS1="\$(date) $ "
Fri Jun 21 22:49:00 BRT 2013 $ echo how cool is this?
how cool is this?
Fri Jun 21 22:49:02 BRT 2013 $

谢谢您的回答,它很有效。我对您在日期命令后面使用的 Sex 很感兴趣。 - Libin Wen
哎呀!这是 Sexta-feira 的缩写,意思是葡萄牙语中的星期五。没有注意到这可能会引起混淆! - Elias Dorneles

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接