默认别名警报用于命令
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 !!!!!
给出带有文本的通知警报 !!!!!和!!!!!!。
那么,简单notify-send
命令和使用通知发送、回显、历史记录、尾部和 sed?
在什么情况下这个别名有用,或者它只是为了双关语而创建的(比如使用sudo sudo sudo sudo sudo apt-get install
我正在使用 Ubuntu 12.10
答案1
您可以使用手册页来获取有关此处组合的命令的详细信息。以下是有关这些命令用途的一些说明:
"$([ $? = 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
使用的简单演示。$()
答案2
让我尝试解释一下这里发生的事情:
notify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')"
--urgency=low
-u, --urgency=LEVEL Specifies the urgency level (low, normal, critical).
-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,则返回“error”。最后我们得到“终端”或“错误”图标。
$(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 块。sed 's/^\s*[0-9]\+\s*//'
删除所有前面的空格和制表符,以及其后的所有数字,并删除末尾的空格和制表符。s/[;&|]\s*alert$//
删除前面的符号;
&
|
、任何制表符、空格和单词“alert”。它只是从符号中清除最后执行的命令,并在末尾加上单词“alert”。
因此如果你使用这样的东西:
echo "Hello alert" | alert
它将显示先前命令的警报。
答案3
我认为目前的答案解释了如何警报工作的内部工作原理(出于好奇,我想了解这一点,并因此来到这里)。但我认为原始 OP 要求什么它很有用,我将尝试根据我从其声明上方的注释中理解的方法来解释它。
它主要用于在您无法一直盯着终端等待命令完成时提醒您命令已完成。根据命令示例,如果命令成功(sleep 10 将需要 10 秒才能完成),sleep 10; alert
将显示命令通知(sleep 10
在本例中)以及终端图标。
从这里可以看出,它应该被用作用<command>; alert
命令替换命令的地方。我个人每天都必须通过 wget 下载视频,因为它会定期失败。所以我只需在下载命令后附加警报,以便在失败时立即通知我,以便可以再次继续(我的警报被修改为发出哔哔声以引起我的注意)。
答案4
之所以有sed
、tail
和 ,history
是因为它需要获取您输入的消息。(出于某种原因)您输入的内容无法通过任何变量直接获得。因此,它必须使用history
来获取您输入的所有内容的列表,tail -n1
获取您输入的最后一项,并使用一些正则表达式来摆脱开头的“alert”命令。
进一步说,其中有一个条件命令,用于测试是否$? = 0
为真。据我所知,如果为真,则它来自终端,应被视为正常消息。否则,应将其视为错误,并会出现错误图标。