使用默认别名“警报”


9

默认别名Alert用于命令

notify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')"

执行时alert将发出带有文本警报和终端图标的通知。用一个参数执行它,例如alert !!!!!通过文本Alert !!!!!发出通知 和!!!!!

那么,简单notify-send命令和使用通知发送,回显,历史记录,尾部和sed的复杂别名之间有什么区别?

在什么情况下,此别名有用还是只是为pun创建的? sudo sudo sudo sudo sudo apt-get install

我正在使用Ubuntu 12.10


我唯一能想到的就是让创建通知更容易...也许吗?
saiarcot895

@ saiarcot895尝试notify-send Linux Ubuntu使用相同的功能,唯一的不同是alert显示了一个图标。但是我不明白为什么该命令包含sed,tail和history
注册用户

Answers:


8

您可以使用手册页获取有关此处组合的命令的详细信息。以下是这些命令的用途:

"$([ $? = 0 ] && echo terminal || echo error)"

这将根据执行状态回显终端错误 - 分别是最后一条命令的成功失败;结果是作为显示图标的-i开关的值notify-send

history|tail -n1

..以获取最后执行的命令。

sed分析文本以显示notify-send消息。


要了解这些内容,请尝试以下操作:

true; echo "$([ $? = 0 ] && echo terminal || echo error)"

.. 这将回显终端

false; echo "$([ $? = 0 ] && echo terminal || echo error)"

.. 这将回显错误

notify-send -i terminal 'Please note the icon..' 'the default icon for the terminal has been used. You can specify any other icon of your choice'

和,

echo $?

..对于了解最后执行的命令的退出值非常有用。

echo "$(echo "the output of this command enclosed within \$(...)") is being supplied here in the outer echo command where is used as an argument."

..嵌套echo$()在命令组合中使用的简单演示。


1
因此,该别名可用于以GUI方式告诉用户命令执行成功还是失败。
注册用户

是的,它会通知有关图形都使用的成功或不成功的执行notify-send..最后一个命令的退出状态与价值确认$?..I've在编辑包含这个..
精确的

7

让我尝试解释这里发生的事情:

notify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')"

1个 --urgency=low

-u,--urgency = LEVEL指定紧急级别(低,正常,严重)。

2 -i "$([ $? = 0 ] && echo terminal || echo error)"

  -i, --icon=ICON[,ICON...]
         Specifies an icon filename or stock icon to display.

这部分"$([ $? = 0 ] && echo terminal || echo error)"$?是最后返回的错误(或成功)。因此,如果最后一个命令退出代码为0,则它​​返回文本“ terminal”,而没有错误。或如果退出代码不为0,则返回“错误”。

最后,我们得到“终端”或“错误”图标。

3 $(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')

history|tail -n1 返回历史记录中的最后一条命令。

sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'') 可以将其分成2块sed。

3.1。sed 's/^\s*[0-9]\+\s*//'删除所有前面的空格和制表符,之后是所有数字,最后还要删除空格和制表符。

3.2。s/[;&|]\s*alert$//删除前面的符号; & |,所有制表符和空格以及单词“ alert”。

它只是符号中最后执行的命令,最后是单词“ alert”。

因此,如果您使用这样的东西:

echo "Hello alert" | alert

它将显示带有先前命令的警报。


3

我认为当前的答案解释警报的内部工作原理(这是我出于好奇而想找到的,并且使我进入了这个领域)。但我认为原来的OP询问什么是有用的,我会尽力解释,因为我从声明以上赞扬理解。

它基本上是用来在命令完成时向您发出警报,当您不能一直等着终端等待整个过程时,请等一等。按照推荐的示例,如果成功,该示例sleep 10; alertsleep 10通过终端图标显示该命令的通知(在此情况下)(睡眠10将需要10秒才能完成)。

从中可以看到,它应该用作<command>; alert将命令替换为命令的位置。我个人每天必须通过wget下载视频,因为它会定期失败。因此,我只在下载命令后附加警报,以在失败时立即通知我,以便可以再次继续(我的警报已修改为发出哔哔声以引起我的注意)。


0

究其原因sedtailhistory在那里是因为它需要得到的信息是正确无误。(由于某种原因)您输入的内容无法通过任何变量直接获得。因此,它必须用于history获取您输入的所有内容的列表,tail -n1获取您最后输入的内容以及一些正则表达式以一开始就摆脱“ alert”命令。

只是为了对此进行扩展,其中有一个条件命令进行测试以查看是否$? = 0为真。据我所知,如果它是真的,那么它是从终端发出的,应该被视为正常消息。否则,应将其视为错误,并且将显示错误图标。


它不会摆脱警报,它将保留在通知中。
注册用户

1
如果您回答“出于某种原因”,通常不是一个很好的答案;)
2014年

@Requist:我为该特定语句添加了“由于某种原因”,因为我印象中$0给您一个命令的第一个参数。但是,对于别名,它可能会有所不同。
saiarcot895 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.