Uso do alias padrão “alert”

8

O alias padrão Alerta é 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 de alert fornece uma notificação com o texto Alerta e um ícone de terminal. Executá-lo com um parâmetro como alert !!!!! fornece notificação com o texto Alerta !!!!! e !!!!! .

Então, qual é a diferença entre o comando simples notify-send e este alias complexado que usa notify-send, echo, history, tail e sed ?

Em quais situações esse alias é útil ou foi criado apenas para o trocadilho (algo como usar sudo sudo sudo sudo sudo apt-get install

Estou usando o Ubuntu 12.10

    
por Registered User 20.02.2014 / 14:02

4 respostas

8

Você poderia usar as man pages para obter detalhes sobre o que os comandos combinados aqui fazem. Aqui está um pouco sobre o propósito desses comandos aqui:

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

Isto echo terminal ou erro conforme o status de execução - sucesso ou falha respectivamente do último comando; e o resultado é como o valor para a opção -i de notify-send para exibir os ícones.

history|tail -n1

.. para obter o último comando executado.

e sed para analisar o texto para exibi-lo com a mensagem notify-send .

Para entender isso, tente o seguinte:

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

.. isso 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 para 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."

.. aninhado echo como uma simples demonstração para usar $() em uma combinação de comandos.

    
por precise 20.02.2014 / 14:36
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. Então, ele retorna o texto "terminal" se o código de saída do último comando for 0, sem erros. Ou retorna "erro" se o código de saída não for 0.

E finalmente conseguimos 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*//' remove todos os espaços e tabulações anteriores, todos numéricos depois disso, e também remove espaços e tabulações no final.

3.2. s/[;&|]\s*alert$// remove os símbolos anteriores ; & | , quaisquer guias e espaços e a palavra "alerta".

É apenas o último comando executado limpo dos símbolos, e a palavra "alerta" no final.

Então, se você usa algo assim:

echo "Hello alert" | alert

Ele mostrará o alerta com o comando anterior.

    
por c0rp 20.02.2014 / 15:09
2

Eu acho que as respostas atuais explicam como o funcionamento interno do trabalho de alerta (que é o que eu queria descobrir por curiosidade e que me trouxe até aqui). Mas eu acho que o OP original pede o que é útil para o qual eu vou tentar explicar como eu entendo dos elogios acima de sua declaração.

É basicamente usado para alertá-lo quando um comando termina quando você não pode ficar sentado assistindo o terminal o tempo todo esperando que ele termine. De acordo com o exemplo de recomendação, sleep 10; alert mostrará uma notificação do comando ( sleep 10 neste caso) com um ícone de terminal, se for bem-sucedido (a suspensão 10 levará 10 segundos para ser concluída).

A partir disso você pode ver que ele deve ser usado como <command>; alert onde você substitui o comando pelo seu comando. Eu pessoalmente tenho que baixar um vídeo todos os dias via wget porque ele falha periodicamente. Então, basta anexar o comando de download com o alerta para avisar imediatamente quando ele falhar, para que ele possa ser continuado novamente (meu alerta é modificado para também bipar para chamar minha atenção).

    
por chesedo 01.10.2014 / 13:21
0

O motivo sed , tail e history 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 através de qualquer variável. Portanto, ele tem que usar history para obter a lista de tudo que você digitou, tail -n1 para obter a última coisa que você digitou e algum regex para se livrar do comando "alert" no início.

Apenas para expandir isso, há um comando condicional que testa se $? = 0 é verdadeiro. Pelo que posso dizer, se for verdade, então vem do terminal e deve ser considerado como uma mensagem normal. Caso contrário, deve ser considerado um erro e um ícone de erro será exibido.

    
por saiarcot895 20.02.2014 / 14:27