O alias padrão Alert é para o comando
notify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')"
A execução alert
fornece uma notificação com o texto Alerta e um ícone do terminal. Executá-lo com um parâmetro como alert !!!!!
dá uma notificação com o texto Alerta !!!!! e !!!!! .
Então, qual é a diferença entre notify-send
comando simples e esse alias complexo que usa notificação-envio, eco, histórico, cauda e sed ?
Em quais situações esse alias é útil ou foi criado apenas para trocadilhos (algo como usar sudo sudo sudo sudo sudo apt-get install
Estou usando o Ubuntu 12.10
bash
notification
Usuário Registrado
fonte
fonte
notify-send Linux Ubuntu
é quase o mesmo, a única diferença é quealert
mostra um ícone. Mas eu não entendo por que o comando contém sed, tail e historyRespostas:
Você pode usar as páginas do manual para obter detalhes sobre o que os comandos combinados aqui fazem. Aqui está um pouco sobre o objetivo desses comandos aqui:
Isso ecoaria terminal ou erro de acordo com o status de execução - bem - sucedido ou com falha, respectivamente, do último comando; e o resultado é o valor para a
-i
opção denotify-send
exibir os ícones...para obter o último comando executado.
e
sed
analisar o texto para exibi-lo comnotify-send
mensagem.Para entender isso, tente o seguinte:
..este ecoaria terminal .
..isso ecoaria erro .
E,
..é muito útil saber o valor de saída do último comando executado.
..nested
echo
como uma demonstração simples para usar$()
em uma combinação de comandos.fonte
notify-send
.. o status de saída do último comando é verificado com o valor de$?
.. Eu incluí isso na edição ..Deixe-me tentar explicar o que está acontecendo aqui:
1
--urgency=low
2
-i "$([ $? = 0 ] && echo terminal || echo error)"
.Esta parte
"$([ $? = 0 ] && echo terminal || echo error)"
.$?
é o último erro (ou sucesso) retornado. Portanto, ele retorna o texto "terminal" se o último código de saída do comando for 0, sem erros. Ou retorna "erro" se o código de saída não for 0.E finalmente temos o ícone "terminal" ou "erro".
3
$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')
history|tail -n1
retorna o último comando do histórico.sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')
isso pode ser separado em 2 blocos de sed.3.1
sed 's/^\s*[0-9]\+\s*//'
remova todos os espaços e guias anteriores, todos numéricos depois disso, e também remova espaços e guias no final.3.2
s/[;&|]\s*alert$//
remove os símbolos anteriores;
&
|
, quaisquer tabulações e espaços e a palavra "alerta".É apenas o último comando executado a partir de símbolos e a palavra "alerta" no final.
Então, se você usar algo assim:
Ele mostrará alerta com o comando anterior.
fonte
Acho que as respostas atuais explicam como funcionam os trabalhos internos do alerta (que é o que eu queria descobrir por curiosidade e o que me trouxe até aqui). Mas acho que o OP original pede o que é útil, para o qual tentarei explicar, como entendo pelos elogios acima de sua declaração.
É basicamente usado para alertá-lo quando um comando é concluído, quando você não pode ficar assistindo o terminal o tempo todo, esperando que ele termine. Conforme o exemplo recomendado,
sleep 10; alert
será exibida uma notificação do comando (sleep 10
neste caso) com um ícone de terminal se for bem-sucedido (o sono 10 levará 10 segundos para ser concluído).A partir disso, você pode ver que ele deve ser usado como
<command>; alert
onde você substitui o comando pelo seu comando. Pessoalmente, tenho que baixar um vídeo todos os dias via wget, porque falha periodicamente. Portanto, basta anexar o comando de download com alerta para notificar-me imediatamente quando falhar, para que possa continuar novamente (meu alerta é modificado para também emitir um sinal sonoro para chamar minha atenção).fonte
A razão
sed
,tail
ehistory
estão lá é porque ele precisa receber a mensagem que você digitou. (Por alguma razão), o que você digitou não está diretamente disponível por meio de nenhuma variável. Portanto, ele precisa ser usadohistory
para obter a lista de tudo que você digitou,tail -n1
para obter a última coisa que digitou e algumas expressões regulares para se livrar do comando "alert" no início.Apenas para expandir isso, há um comando condicional lá que testa para ver se
$? = 0
é verdade. Pelo que sei, se é verdade, é proveniente do terminal e deve ser considerada uma mensagem normal. Caso contrário, deve ser considerado um erro e um ícone de erro será exibido.fonte
$0
lhe dá o primeiro argumento para um comando. Pode ser diferente no caso de um alias, no entanto.