使用默认别名“alert”
默认别名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 !!!!!
一样的param执行它alert !!!!!
通知文本提醒!!!!! 和!!!!! 。
那么,简单的notify-send
命令和这个使用notify-send,echo,history,tail和sed的复杂别名之间的区别是什么?
在哪种情况下这个别名是有用的,或者它只是为双关语创建(有点像使用sudo sudo sudo sudo sudo apt-get install
我正在使用Ubuntu 12.10
您可以使用手册页来获取有关此处组合的命令的详细信息。 这里有一些关于这些命令的目的:
"$([ $? = 0 ] && echo terminal || echo error)"
这将根据执行状态回显终端或错误 – 分别成功或失败最后一个命令; 结果是作为显示图标的notify-send
的-i
开关的值。
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."
..nested echo
是一个在命令组合中使用$()
的简单演示。
让我试着解释一下这里发生了什么:
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,则返回“error”。
最后我们得到“终端”或“错误”图标。
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”一词。
所以如果你使用这样的东西:
echo "Hello alert" | alert
它将使用上一个命令显示警报。
我认为目前的答案解释了警报工作的内部运作方式(这是我想要从好奇心中找到的,哪些让我在这里)。 但是我认为最初的OP会询问我将尝试解释哪些是有用的,正如我从其声明的上述赞誉中所理解的那样。
它基本上用于在命令完成时提醒您,当您无法坐在终端上等待它完成时。 按照推荐的例子sleep 10; alert
sleep 10; alert
将显示该命令的通知(在这种情况下为sleep 10
),如果成功则显示终端图标(睡眠10将需要10秒才能完成)。
从中您可以看到它应该用作
用命令替换命令的位置。 我个人每天都要通过wget下载video,因为它会定期失败。 所以我只是附加带警报的下载命令,以便在失败时立即通知我,以便它可以再次继续(我的警报被修改为也发出哔声以引起我的注意)。
sed
, tail
和history
之所以存在,是因为它需要获取您键入的消息。 (由于某种原因,)您输入的内容不能通过任何变量直接获得。 因此,它必须使用history
来获取您键入的所有内容的列表,使用tail -n1
来获取您输入的最后一个内容,并使用一些正则表达式来开始删除“alert”命令。
为了扩展这个,有一个条件命令在那里测试看看是否$? = 0
$? = 0
是真的。 据我所知,如果是真的,那么它来自终端,应该被视为正常的消息。 否则,它应被视为错误,并将出现错误图标。