Utilizzo dell'alias predefinito "alert"


9

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 alertdà una notifica con Alert di testo e un'icona terminale. Eseguirlo con un parametro come alert !!!!!dà una notifica con il testo Alert !!!!! e !!!!! .

Quindi, qual è la differenza tra un notify-sendcomando semplice e questo alias complesso che utilizza Notify-Send, Echo, History, Tail e Sed ?

In quali situazioni questo alias è utile 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


L'unica cosa che mi viene in mente è solo per rendere più semplice la creazione di una notifica ... forse?
saiarcot895,

@ saiarcot895 prova notify-send Linux Ubuntuche è più o meno la stessa, l'unica differenza è che alertmostra un'icona. Ma non capisco perché il comando contenga sed, tail e history
Utente registrato

Risposte:


8

È possibile utilizzare le pagine man per ottenere dettagli su ciò che fanno i comandi combinati qui. Ecco un po 'lo scopo di questi comandi qui:

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

Ciò farebbe eco al terminale o all'errore secondo lo stato di esecuzione - rispettivamente riuscito o fallito dell'ultimo comando; e il risultato è come valore -idell'interruttore notify-sendper la visualizzazione delle icone.

history|tail -n1

..per ottenere l'ultimo comando eseguito.

e sedper analizzare il testo per visualizzarlo con un notify-sendmessaggio.


Per capirli prova quanto segue:

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

..questo sarebbe eco terminale .

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

.. questo echeggerebbe l' errore .

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

..nidificato echocome una semplice demo per l'utilizzo $()in una combinazione di comandi.


1
quindi questo alias può essere usato per dire all'utente se il comando è stato eseguito correttamente o meno, ma in modo GUI.
Utente registrato

sì, avrebbe notificato graficamente le esecuzioni riuscite o non riuscite utilizzando il notify-send.. lo stato di uscita dell'ultimo comando è verificato con il valore di $?.. L'ho incluso nella modifica ..
preciso

7

Vorrei 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 esito positivo) restituito. Quindi restituisce il testo "terminale" se l'ultimo codice di uscita del comando era 0, senza errori. Oppure restituisce "errore" se il codice di uscita non era 0.

E finalmente otteniamo 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, tutti numerici dopo quello, e rimuove anche gli spazi e le schede alla fine.

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

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

Quindi se usi qualcosa del genere:

echo "Hello alert" | alert

Mostrerà un avviso con il comando precedente.


3

Penso che le risposte attuali spieghino come funzionano i meccanismi interni dell'allerta (che è quello che volevo scoprire per curiosità e che mi ha portato qui). Ma penso che il PO originale chieda per cosa è utile, che proverò a spiegare come ho capito dagli elogi sopra la sua dichiarazione.

Fondamentalmente è usato per avvisarti quando un comando è finito quando non puoi sederti a guardare il terminale per tutto il tempo in attesa che finisca. Come da esempio di encomio sleep 10; alertmostrerà una notifica del comando ( sleep 10in questo caso) con un'icona terminale se ha esito positivo (il sonno 10 richiederà 10 secondi per il completamento).

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


0

Il motivo sed, taile historyci sono, è perché ha bisogno di ottenere il messaggio che hai digitato. (Per qualche motivo), ciò che hai digitato non è direttamente disponibile attraverso nessuna variabile. Pertanto, deve usare historyper ottenere l'elenco di tutto ciò che hai digitato, tail -n1per ottenere l'ultima cosa che hai digitato e un po 'di regex per sbarazzarsi del comando "alert" all'inizio.

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


Non sbarazzarsi di allerta , rimarrà nella notifica.
Utente registrato

1
Se rispondi con "per qualche motivo" spesso non è un'ottima risposta;)
Requist

@Requist: ho aggiunto "per qualche motivo" per quella specifica affermazione perché ero sotto l'impressione che $0ti dà il primo argomento per un comando. Potrebbe essere diverso nel caso di un alias, però.
saiarcot895,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.