Estoy tratando de guardar la salida de un comando en un archivo. El comando es:
clang -Xclang -ast-dump -fsyntax-only main.cpp > output.txt
Sin embargo, el archivo resultante output.txt cuando se abre (por gedit y jedit en ubuntu) me da esto:
[0;1;32mTranslationUnitDecl[0m[0;33m 0x4192020[0m <[0;33m<invalid sloc>[0m> [0;33m<invalid sloc>[0m
[0;34m|-[0m[0;1;32mTypedefDecl[0m[0;33m 0x4192558[0m <[0;33m<invalid sloc>[0m> [0;33m<invalid sloc>[0m implicit[0;1;36m __int128_t[0m [0;32m'__int128'[0m
[0;34m| `-[0m[0;32mBuiltinType[0m[0;33m 0x4192270[0m [0;32m'__int128'[0m
[0;34m|-[0m[0;1;32mTypedefDecl[0m[0;33m 0x41925b8[0m <[0;33m<invalid sloc>[0m> [0;33m<invalid sloc>[0m implicit[0;1;36m __uint128_t[0m [0;32m'unsigned __int128'[0m
[0;34m| `-[0m[0;32mBuiltinType[0m[0;33m 0x4192290[0m [0;32m'unsigned __int128'[0m
...
Cuando realmente debería verse así:
TranslationUnitDecl 0x4e46020 <<invalid sloc>> <invalid sloc>
|-TypedefDecl 0x4e46558 <<invalid sloc>> <invalid sloc> implicit __int128_t '__int128'
| `-BuiltinType 0x4e46270 '__int128'
|-TypedefDecl 0x4e465b8 <<invalid sloc>> <invalid sloc> implicit __uint128_t 'unsigned __int128'
| `-BuiltinType 0x4e46290 'unsigned __int128'
...
Pensé que podría ser un problema de codificación, verifiqué la codificación del archivo, file -bi output.txt
que sale text/plain; charset=us-ascii
.
Pensé que si cambiaba la codificación a utf-8, el problema se solucionaría, así que intenté esto:
clang -Xclang -ast-dump -fsyntax-only main.cpp | iconv -f us-ascii -t UTF-8 > output.txt
Pero no hizo la diferencia.
¿Qué puedo hacer para resolver este problema?
El problema no es que estoy tratando de ver la versión resaltada de sintaxis (no tuve problemas para verla en primer lugar). Necesito guardar el AST generado por clang en un archivo y luego analizarlo, lo que sería difícil con la información de color que queda.
>
no genera salida, simplemente designa al shell que desea colocar la salida de suclang
comando en el archivo dado, en lugar de la terminal. Después de eso, lo está viendo de una manera que no permite códigos de color de la misma manera. Si estuviera encat
el archivo, funcionaría ya que la terminal se haría cargo, y puede hacerless
lo mismo con la-R
bandera.