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 alert
proporciona 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-send
comando 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
bash
notification
usuario registrado
fuente
fuente
notify-send Linux Ubuntu
que sea muy similar, la única diferencia es quealert
muestra un ícono, pero no entiendo por qué el comando contiene sed, cola e historialRespuestas:
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í:
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
-i
interruptor denotify-send
mostrar los iconos...para ejecutar el último comando.
y
sed
analizar el texto para mostrarlo con elnotify-send
mensaje.Para entender esto intente lo siguiente:
..esto haría eco terminal .
..esto haría eco de error .
Y,
..es muy útil saber el valor de salida del último comando ejecutado.
..estado
echo
como una demostración simple para usar$()
en un combo de comandos.fuente
notify-send
... el estado de salida del último comando se verifica con el valor de ... Lo$?
he incluido en la edición ...Permítanme intentar explicar lo que está sucediendo aquí:
1
--urgency=low
2
-i "$([ $? = 0 ] && echo terminal || echo error)"
.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:
Mostrará alerta con el comando anterior.
fuente
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; alert
se mostrará una notificación del comando (sleep 10
en 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>; alert
donde 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).fuente
La razón
sed
,tail
yhistory
está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 usarsehistory
para obtener la lista de todo lo que ha escrito,tail -n1
para 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
$? = 0
es 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.fuente
$0
te da el primer argumento para un comando. Sin embargo, podría ser diferente en el caso de un alias.