Uso dell'alias predefinito "alert"

8

L'alias predefinito Alert è per il comando

notify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')"

L'esecuzione di alert fornisce una notifica con il testo Alert e un'icona di terminale. L'esecuzione con un parametro come alert !!!!! fornisce una notifica con il testo Avviso !!!!! e !!!!! .

Quindi, qual è la differenza tra il semplice comando notify-send e questo alias complesso che utilizza notify-send, echo, history, tail e sed ?

In quali situazioni è utile questo alias o è stato appena creato per il gioco di parole (qualcosa come usare sudo sudo sudo sudo sudo apt-get install

Sto usando Ubuntu 12.10

    
posta Registered User 20.02.2014 - 14:02

4 risposte

8

Potresti usare le pagine man per ottenere dettagli su ciò che i comandi combinati qui fanno. Ecco un po 'dello scopo di questi comandi qui:

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

Ciò equivale a terminale o errore come da stato di esecuzione - riuscito o fail rispettivamente del ultimo comando; e il risultato è come il valore dell'interruttore -i di notify-send per la visualizzazione delle icone.

history|tail -n1

.. per ottenere l'ultimo comando eseguito.

e sed per analizzare il testo per visualizzarlo con il messaggio notify-send .

Per comprenderli, prova quanto segue:

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

.. questo sarebbe echo terminale .

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

... questo echebbe 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'

E,

echo $?

.. è molto utile per conoscere il valore di uscita dell'ultimo comando eseguito.

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 come semplice demo per l'utilizzo di $() in una combinazione di comandi.

    
risposta data precise 20.02.2014 - 14:36
7

Fammi provare a spiegare cosa sta succedendo qui:

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 Specifica il livello di urgenza (basso, normale, critico).

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

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

Questa parte "$([ $? = 0 ] && echo terminal || echo error)" . $? è l'ultimo errore (o successo) restituito. Quindi restituisce il testo "terminale" se l'ultimo comando exit code era 0, senza errori. O restituisce "errore" se il codice di uscita non era 0.

E finalmente riceviamo l'icona "terminale" o "errore".

3 $(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')

history|tail -n1 restituisce l'ultimo comando dalla cronologia.

sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'') questo può essere separato in 2 blocchi di sed.

3.1. sed 's/^\s*[0-9]\+\s*//' rimuove tutti gli spazi e le schede precedenti, successivamente tutti numerici, e rimuove anche spazi e schede alla fine.

3.2. s/[;&|]\s*alert$// rimuove i simboli precedenti ; & | , eventuali tabulazioni e spazi e parola "avviso".

È pulito l'ultimo comando eseguito dai simboli e la parola "alert" alla fine.

Quindi, se usi qualcosa del genere:

echo "Hello alert" | alert

Mostrerà avviso con il comando precedente.

    
risposta data c0rp 20.02.2014 - 15:09
2

Penso che le risposte attuali spieghino come i meccanismi interni del lavoro di allerta (che è quello che volevo scoprire per curiosità e che mi ha portato qui). Ma penso che l'OP originale chieda cosa è utile per cui cercherò di spiegare come ho capito dai commenti sopra la sua dichiarazione.

È usato fondamentalmente per avvisarti quando un comando è finito quando non puoi sederti a guardare il terminale tutto il tempo che aspetta che finisca. Come nell'esempio di esempio sleep 10; alert mostrerà una notifica del comando ( sleep 10 in questo caso) con un'icona di terminale se ha successo (sleep 10 impiegherà 10 secondi per completare).

Da questo puoi vedere che dovrebbe essere usato come <command>; alert dove sostituisci il comando con il tuo comando. Io personalmente devo scaricare un video ogni giorno tramite wget perché fallisce periodicamente. Quindi aggiungo semplicemente il comando di download con avviso per avvisarmi immediatamente quando non è riuscito, in modo che possa essere continuato di nuovo (il mio avviso viene modificato anche per emettere un segnale acustico per ottenere la mia attenzione).

    
risposta data chesedo 01.10.2014 - 13:21
0

Il motivo sed , tail e history ci sono perché ha bisogno di ottenere il messaggio che hai digitato. (Per qualche ragione,) ciò che hai digitato non è direttamente disponibile attraverso qualsiasi variabile. Pertanto, deve usare history per ottenere l'elenco di tutto ciò che hai digitato, tail -n1 per ottenere l'ultima cosa che hai digitato, e qualche regex per sbarazzarti del comando "avviso" all'inizio.

Solo per espandere questo, c'è un comando condizionale in là che verifica se $? = 0 è vero. Da quello che posso dire, se è vero, allora proviene dal terminale e dovrebbe essere considerato come un messaggio normale. Altrimenti, dovrebbe essere considerato un errore e verrà visualizzata un'icona di errore.

    
risposta data saiarcot895 20.02.2014 - 14:27

Leggi altre domande sui tag