2011-11-30 13 views
5

Me pregunto cómo puedo hacer un carácter Celsius en mi script bash, así que puedo corregir la salida en la línea "CPU temp: 50 C"? ¿Cuáles son las secuencias de escape para este tipo de caracteres especiales, siempre que mi fuente los admita?¿Cómo hacer caracteres especiales en un guión Bash para conky?

Aún rascándome la cabeza ...

Para ser más precisos lo necesito para usar en conky utilizo esta línea: awk '{printf ($ 3" C ")}'. ¿Cómo debería corregirlo para que produzca un grado Celsius? Causa si inserto ℃ carácter directamente, Conky lo atornilla.

Respuesta

8

Todas las secuencias de bytes sin control de las secuencias de comandos que se envían al terminal se interpretan para su visualización según la configuración del terminal. Si lo configura para interpretar los datos entrantes como utf-8, entonces todo lo que necesita hacer en su script bash es generar el carácter Celsius según lo requerido por utf-8.

Configurar su terminal correctamente depende de la aplicación que esté utilizando. Es bastante probable que ya esté en modo utf-8.

Para mostrar el carácter que desea, debe buscar su punto de código Unicode y codificarlo en utf-8 o puede buscarlo en algún lugar donde la secuencia de caracteres utf-8 ya se muestra. El caracter Celsius se describe here por ejemplo.

Celsius UTF-8 secuencia es 0xE2 0x84 0x83, para que pueda mostrar en su cáscara utilizando el constructo $'string' ya que acepta la \xhh de escape:

$ echo $'\xe2\x84\x83' 
℃ 

o eco con -e:

$ echo -e '\xe2\x84\x83' 
℃ 

Además, puede asignar a una variable

$ CEL=$'\xe2\x84\x83' 
$ echo $CEL 
℃ 

Si usted quiere visualizar ℃ como dos caracteres separados: Carácter grado y la letra C, entonces se puede utilizar this character y este comando:

$ echo $'\xc2\xb0'C 
°C 

Si está utilizando un shell que no soporta la construcción $'string', también se puede utilizar utilidades como perl o Python:

$ python -c 'print "\xe2\x84\x83"' 
℃ 
$ perl -e 'print "\xe2\x84\x83\n"' 
℃ 

En GNU awk puede utilizar el lenguaje C estándar escapa incluyendo \xhh, por ejemplo:

$ awk 'BEGIN { print "\xe2\x84\x83"; }' 
℃ 
$ awk 'BEGIN { print "\xc2\xb0\C"; }' 
°C 

Tenga en cuenta que se necesita una barra invertida adicional para terminar el número hexadecimal (sin ella, la secuencia de escape consume todos los dígitos hexadecimales, incluida la letra C, consulte GNU awk user's guide).

Solución más portátil en awk es utilizar secuencia octal.Desde hexadecimal 0xC2 es octal 302 y hexadecimal 0xB0 es octal 260, puede hacer lo siguiente:

$ awk 'BEGIN { print "\302\260C"; }' 
°C 

Del mismo modo,

$ awk 'BEGIN { print "\342\204\203"; }' 
℃ 
+0

gracias por su ayuda – mountpeaks

+0

No soy capaz de encontrar ninguna referencia a la '$' string'' construir; ¿Cuál es su nombre exacto o dónde está documentado? – davide

+0

'man bash' y luego busque' $ '' –

0

no hay una secuencia de escape para ° por lo que yo soy consciente.