Uso del alias predeterminado "alerta"

9

La alerta de alias predeterminada es para el comando

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

La ejecución alertproporciona una notificación con alerta de texto y un ícono de terminal. ¡Ejecutarlo con un parámetro como alert !!!!!da notificación con texto de alerta! y !!!!! .

Entonces, ¿cuál es la diferencia entre un notify-sendcomando simple y este alias complejo que utiliza notificar-enviar, eco, historial, cola y sed ?

¿En qué situaciones es útil este alias o se creó para juegos de palabras? sudo sudo sudo sudo sudo apt-get install

Estoy usando Ubuntu 12.10

usuario registrado
fuente
Lo único que se me ocurre es hacer que la creación de una notificación sea más fácil ... ¿quizás?
saiarcot895
@ saiarcot895 intenta notify-send Linux Ubuntuque sea muy similar, la única diferencia es que alertmuestra un ícono, pero no entiendo por qué el comando contiene sed, cola e historial
usuario registrado

Respuestas:

8

Puede usar las páginas man para obtener detalles sobre lo que hacen los comandos combinados aquí. Aquí hay un poco sobre el propósito de esos comandos aquí:

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

Esto haría eco del terminal o error según el estado de ejecución: exitoso o fallido respectivamente del último comando; y el resultado es como el valor para el -iinterruptor de notify-sendmostrar los iconos.

history|tail -n1

..para ejecutar el último comando.

y sedanalizar el texto para mostrarlo con el notify-sendmensaje.


Para entender esto intente lo siguiente:

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

..esto haría eco terminal .

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

..esto haría eco de 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'

Y,

echo $?

..es muy útil saber el valor de salida del último comando ejecutado.

echo "$(echo "the output of this command enclosed within \$(...)") is being supplied here in the outer echo command where is used as an argument."

..estado echocomo una demostración simple para usar $()en un combo de comandos.

preciso
fuente
1
por lo que este alias se puede usar para decirle al usuario si el comando se ejecutó con éxito o falló, pero de forma GUI.
Usuario registrado
sí, notificaría gráficamente tanto las ejecuciones exitosas como las incorrectas utilizando notify-send... el estado de salida del último comando se verifica con el valor de ... Lo $?he incluido en la edición ...
preciso
7

Permítanme intentar explicar lo que está sucediendo aquí:

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 el nivel de urgencia (bajo, 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)". $?es el último error (o éxito) devuelto. Por lo tanto, devuelve el texto "terminal" si el último código de salida del comando fue 0, sin errores. O devuelve "error" si el código de salida no era 0.

Y finalmente obtenemos el icono "terminal" o "error".

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

history|tail -n1 devuelve el último comando del historial.

sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'') Esto se puede separar en 2 bloques de sed.

3.1. sed 's/^\s*[0-9]\+\s*//'eliminar todos los espacios y pestañas anteriores, todos numéricos después de eso, y también eliminar espacios y pestañas al final.

3.2. s/[;&|]\s*alert$//elimina los símbolos anteriores ; & |, las pestañas y espacios y la palabra "alerta".

Es solo limpiar el último comando ejecutado de los símbolos, y la palabra "alerta" al final.

Entonces, si usas algo como esto:

echo "Hello alert" | alert

Mostrará alerta con el comando anterior.

c0rp
fuente
3

Creo que las respuestas actuales explican cómo funciona el funcionamiento interno de la alerta (que es lo que quería encontrar por curiosidad y que me trajo aquí). Pero creo que el OP original pregunta qué es útil para lo que intentaré explicarlo, según entiendo por los elogios anteriores a su declaración.

Básicamente se usa para alertarlo cuando un comando ha finalizado cuando no puede sentarse mirando la terminal todo el tiempo esperando que termine. Según el ejemplo de la recomendación, sleep 10; alertse mostrará una notificación del comando ( sleep 10en este caso) con un icono de terminal si tiene éxito (la suspensión 10 tardará 10 segundos en completarse).

A partir de esto, puede ver que debe usarse como el lugar <command>; alertdonde reemplaza el comando con su comando. Personalmente, tengo que descargar un video todos los días a través de wget porque falla periódicamente. Así que solo agrego el comando de descarga con alerta para notificarme de inmediato cuando falló para que pueda continuar nuevamente (mi alerta se modifica para que también emita un pitido para llamar mi atención).

chesedo
fuente
0

La razón sed, taily historyestán ahí es porque necesita obtener el mensaje que escribió. (Por alguna razón) lo que escribió no está disponible directamente a través de ninguna variable. Por lo tanto, tiene que usarse historypara obtener la lista de todo lo que ha escrito, tail -n1para obtener lo último que escribió, y algunas expresiones regulares para deshacerse del comando "alerta" al comienzo.

Solo para ampliar esto, hay un comando condicional que prueba para ver si $? = 0es cierto. Por lo que puedo decir, si es cierto, entonces proviene del terminal y debe considerarse como un mensaje normal. De lo contrario, debe considerarse un error y aparecerá un icono de error.

saiarcot895
fuente
No se deshace de la alerta , permanecerá en la notificación.
Usuario registrado
1
Si responde con "por alguna razón", a menudo no es una muy buena respuesta;)
Requerir
@Requist: agregué "por alguna razón" para esa declaración específica porque tenía la impresión de que $0te da el primer argumento para un comando. Sin embargo, podría ser diferente en el caso de un alias.
saiarcot895