Uso do alias padrão "alert"

9

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 alertfornece 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-sendcomando 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

Usuário Registrado
fonte
A única coisa em que consigo pensar é apenas para facilitar a criação de uma notificação ... talvez?
saiarcot895
@ saiarcot895 tente notify-send Linux Ubuntué quase o mesmo, a única diferença é que alertmostra um ícone. Mas eu não entendo por que o comando contém sed, tail e history
Usuário registrado

Respostas:

8

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:

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

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 -iopção de notify-sendexibir os ícones.

history|tail -n1

..para obter o último comando executado.

e sedanalisar o texto para exibi-lo com notify-sendmensagem.


Para entender isso, tente o seguinte:

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

..este ecoaria terminal .

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

..isso ecoaria erro .

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'

E,

echo $?

..é muito útil saber o valor de saída do último comando executado.

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 echocomo uma demonstração simples para usar $()em uma combinação de comandos.

preciso
fonte
1
portanto, esse alias pode ser usado para informar ao usuário se o comando foi executado com êxito ou falhou, mas de uma maneira GUI.
Usuário Registrado
sim, ele notificaria graficamente sobre as execuções bem-sucedidas ou malsucedidas usando o gráfico notify-send.. o status de saída do último comando é verificado com o valor de $?.. Eu incluí isso na edição ..
precisa
7

Deixe-me tentar explicar o que está acontecendo aqui:

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 Especifica o nível de urgência (baixo, normal, crítico).

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

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

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:

echo "Hello alert" | alert

Ele mostrará alerta com o comando anterior.

c0rp
fonte
3

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; alertserá exibida uma notificação do comando ( sleep 10neste 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>; alertonde 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).

chesedo
fonte
0

A razão sed, taile historyestã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 usado historypara obter a lista de tudo que você digitou, tail -n1para 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.

saiarcot895
fonte
Ele não se livra do alerta , permanecerá na notificação.
Usuário Registrado
1
Se você responder com "por algum motivo", muitas vezes não é uma resposta muito boa;) #
236 Requist
@ Equist: eu adicionei "por algum motivo" para essa declaração específica, porque eu estava com a impressão de que $0lhe dá o primeiro argumento para um comando. Pode ser diferente no caso de um alias, no entanto.
saiarcot895