4

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

我们知道 bash 中有一个“MAILCHECK”,每隔几分钟 bash 就会检查邮箱,如果你有新邮件,会给你一条消息。请注意,此通知不需要命令。如果有新邮件,Bash 会随时自动打印消息。

在这里,我有几个问题:

  1. 我的 zsh 中没有这样的通知(也许我忘记了 .zshrc 中的某些内容)

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

  3. a certain command在 bash/zsh 中完成我的任何命令后如何执行。例如,当我输入lsand时<enter>ls将被执行,然后the certain command将被执行。如果我能做到这一点,自动通知就完成了!

明白了吗?有什么建议吗?

4

3 回答 3

4

1、zsh中的邮件通知:

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

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大致相同,除了也暴露mailpathMAILPATH.

3.运行任意命令:

bash中, 的值PS1作为命令提示符打印。除非promptvars选项未设置(默认设置),否则字符串在使用前会经过参数扩展、命令替换、算术扩展和引号删除。其中第二个意味着您可以在命令提示符下执行任意 shell 命令。

zsh具有相同的功能,由 shell 选项控制promptsubst(或者PROMPT_SUBST,如手册页所述)。与 不同bash的是,默认情况下未设置 shell 选项。此外,您可能会发现您无法更改PS1(如果您的发行版使用提示主题)的值,因为提示主题PS1在每个命令提示符之前都会重置。

事实证明,zsh在打印提示之前(或在其他情况下;我只关注这种情况)运行 shell 函数的机制不同。有一个名为的数组参数precmd_functions,其值是将在每次提示之前运行的函数的名称。PS1(提示主题系统使用此机制在打印之前重置。)

于 2013-06-22T05:26:03.030 回答
1

我真的不知道如何处理问题12 ,但是在交互式 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 $
于 2013-06-22T01:49:18.943 回答
1

还有PROMPT_COMMANDbash 变量:

PROMPT_COMMAND

如果设置,该值将被解释为在打印每个主要提示 ($PS1) 之前要执行的命令。

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

$ PS1='\$ ' PROMPT_COMMAND='r=$?;(($r != 0)) && printf "[%d] " $r'
$ whoami
jackman
$ (exit 3)
[3] $ pwd
/home/jackman
$ 
于 2013-06-22T18:52:48.657 回答